码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2017-05-15 15:06:23      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:程序执行效率   系统   函数   creat   amp   tin   释放   art   logs   

  线程是程序执行的最小单位,线程的目的是为乐更好的支持多cpu和减小上下文切换的开销。一个进程至少拥有一个线程,当运行在单cpu上时,采用多线程可以使设计更简洁,程序执行效率更高;如果运行在多cpu机器上,可以用多个cpu执行各个线程,做到真正的并行处理。

  linux下最常使用的是pthread库,需要使用到pthread_create等函数。

int create_thread(void *(*strat_routine)(void*), void *arg, pthread_t *thread, pthread_attr_t *pAttr);
void begin_thread();
void end_thread();
int g_cur_thread_num = 0;

pthread_mutex_t gctn_lock = PTHREAD_MUTEX_INITIALIZER;

int create_thread(void *(*start_func)(void *), void *arg, pthread_t *pid, pthread_attr_t pAttr)
{
    pthread_attr_t attr;
    pthread_t pt;

    if(pAttr == NULL)
    {
         pAttr = &attr;
         pthread_attr_init(pAttr);
         pthread_attr_setstacksize(pAttr, 1024*1024);
         pthread_attr_setdetachstate(pAttr, PTHREAD_CREATE_DETACHED);
    }

    if(pid == NULL)
        pid = &pt;

    int rv = pthread_create(pid, pattr, start_func, arg);
    pthread_attr_destory(pAttr);
    return rv;
}

void begin_thread()
{
    LOG(LOG_LEVEL_DEBUG, "begin thread %lu.", pthread_self());
}

void end_thread()
{
    pthread_mutex_lock(&gctn_lock);
    --g_cur_thread_num;
    LOG(LOG_LEVEL_DEBUG, "End Thread %lu, cur_thread_num = %d", pthread_self(), g_cur_thread_num);
     pthread_mutex_unlock(&gctn_lock);
}

  这里使用的几个函数是pthread_create、pthread_attr_init、pthread_attr_setstacksize、pthread_attr_setdetachstate、pthread_attr_destroy、pthread_mutex_lock、pthread_mutex_unlock.

  pthread_create的原型是:

int pthread_create(pthread_t *restrict thread, const pthread_attr_t *restrict attr, void *(*start_routine)(void *), void *restrict arg);

  pthread_create的作用是创建一个新的线程,创建的线程id将存储在thread参数中,attr指定线程所需的参数,线程创建完毕后,将运行start_routine函数,arg是start_routine的参数。

  pthread_attr_init的原型是:

int pthread_attr_init(pthread_attr_t *attr);

  pthread_attr_destroy的原型是:

int pthread_attr_destroy(pthread_attr_t *attr);

  这两个函数的作用相反,一个是初始化线程对象的属性,一个是去除初始化。

  pthread_attr_setdetachstate的原型是:

int pthread_attr_setdetachstate(pthread_attr_t *attr int detachstate);

  pthread_attr_setdetachstate的作用是设置线程是分离的,线程有两种状态,一种是joinable,一种是detached。在使用线程时,为了避免结束后线程的资源得到不正确释放,从而产生内存泄漏,对于joinable状态的线程,需要调用pthread_join函数来回收资源,要么就是将线程设置为detached,这种状态的线程在结束后,西涌回自动回收它所占的资源。

  pthread_attr_setstacksize的原型是:

int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);

  系统的默认堆栈大小是8192字节,pthread_attr_setstacksize的作用是设置堆栈大小。

  pthread_mutex_lock的原型是:

int pthread_mutex_lock(pthread_mutex_t *mutex);

  pthread_mutext_unlock的原型是:

int pthread_mutex_unlock(pthread_mutex_t *mutex);

  作用是加锁和释放锁。

  

多线程

标签:程序执行效率   系统   函数   creat   amp   tin   释放   art   logs   

原文地址:http://www.cnblogs.com/canyudeguang/p/6856319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!