标签:程序执行效率 系统 函数 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