線程(thread)
線程創建
int pthread_create(pthread_t *,const pthread_attr_t *,void *(*)(void *),void *); //類型
pthread_create(&thread_id,&thread_attribute,&thread_fun,&fun_arg); //形參名
thread_id 線程id(類型為phread_t)或句柄(類型為phread_t的數組)
thread_attribute 線程屬性(傳遞NULL指針即為標準默認值)
thread_fun 線程函數名
fun_arg 函數參數傳入,只可傳入一個參數
errorcode(返回值) pthread_create的返回值,如果創建操作失敗,將會返回非零值
線程結束
pthread_exit(void* retVal)
retVal 返回retVal給創建此線程的線程
線程属性設置
pthread_attr_t //線程屬性數據結構
pthread_attr_init(pthread_attr_t *attr) //初始化屬性結构
pthread_attr_setXXX() //設置屬性值
pthread_attr_destroy(pthread_attr_t *attr) //撤除屬性結构
pthread_attr_setstacksize(&my_attributes,(size_t)8192); //設置屬性棧尺寸
size_t my_stack_size;pthread_attr_getstacksize(&my_attributes, &my_stack_size); //获得屬性棧尺寸
線程合併與分離 (阻塞主線程,直到子線程完成並回收其資源)
合併有返回值, 分離沒有返回值
pthread_join(pthread_t thread, void **status) //合併(線程, 線程的返回值)
pthread_detach(pthread_t thread) //分離(線程)
取得線程id
pthread_t pthread_self()
比較線程
int pthread_equal(pthread_t t1, pthread_t t2)
線程讓出cpu
void sched_yield()
屏障(barrier) (同步)
線程到逹屏障會等待,直到所有線程都到逹屏障
pthread_barrier_t b; //屏障數據結構
pthread_barrier_init(&b,NULL,3); //初始化 (屏障, 屬性, 線程數)
pthread_barrier_wait(&b); //線程等待屏障
互斥(mutex)
多個線程共享變量,需要使用鎖來限制讀寫
pthread_mutex_lock() //上鎖
若可上鎖則直接上鎖,不可上鎖則阻塞至可以上鎖為止
pthread_mutex_trylock() //嘗試上鎖
若可上鎖則直接上鎖,不可上鎖則直接返回
pthread_mutex_unlock() //解鎖
pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER //靜態初始化
pthread_mutex_t *mutex;
pthread_mutex_init(pthread_mutex_t*,pthread_mutexattr_t*) //動態初始化
pthread_mutexattr_t //互斥屬性數據結構
pthread_mutexattr_destroy(pthread_mutexattr_t*attr) //銷毀互斥屬性
pthread_mutex_destroy() //銷毀互斥
RecursiveMutex (遞歸互斥)
條件變量(Condition variable)
操作會先等待一個信號才執行
pthread_cond_t //條件變量類型
pthread_cond_t cond= PTHREAD_COND_INITIALIZER; //靜態初始化
pthread_cond_init(pthread_cond_t *cond, constpthread_condattr_t *attr); //動態初始化
pthread_cond_destroy(pthread_cond_t *cond); //刪除
條件變量属性
pthread_condattr_init() //初始化
pthread_condattr_destroy() //刪除
等待信號廣播
pthread_cond_wait() //等待 (等待信號)
pthread_cond_signal() //信號 (發出信號)
pthread_cond_broadcast() //廣播
函數或參數的前綴綜合
pthread_ //線程
pthread_attr_ //線程屬性
pthread_barrier_ //屏障
pthread_mutex_ //互斥
pthread_mutexattr_ //互斥屬性
pthread_cond_ //條件變量
pthread_condattr_ //條件變量屬性
pthread_key_ //線程存儲