[APUE]第十一章 線程

第十一章 線程

線程也有線程ID用pthread_t 表示

每個系統對pthread_t 的定義不同。

int pthread_equal(pthread_t tid1, pthread_ttid2)

獲得線程的線程ID

pthread_t pthread_self()

創建線程

int pthread_create(pthread_t *tid, const pthread_atrr_t*attr, void* (*start_rtn)(void*). void* arg);

每個線程都有自己的棧空間和errno變量

 

線程可以有三種方式退出

1          線程只是從啓動例程返回,返回值是退出碼

2          線程可以被同一個進程的其他線程取消

3          線程調用phread_exit();

 

void pthread_exit(void * reval);
 
int pthread_join(pthread_t thread, void**reval);

調用線程將一直阻塞可知道指定的線程返回。

 

取消線程

線程可以調用pthread_cancel(pthread_t tid);

int pthread_cancel(pthread_t tid);

 

 

線程清理函數

void pthread_cleanup_push(void(*rtn)(void*), void* arg);
void pthread_pop(int execute);

什麼時候調用這些清理函數

1          線程調用pthread_exit

2          響應取消請求的時候

3          用非零execute參數調用pthread_cleanup_pop的時候

 

使線程分離,這樣就不用調用phread_join去獲取線程的狀態了,讓操作系統來回收線程的資源。

int pthread_detach(pthread_t  tid);

還可以phread_create的時候對傳入的屬性,設置爲分離狀態

 

 

線程同步:

互斥量

初始化和destroy

int pthread_mutex_init(pthread_mutex_t*mutex, const pthread+_mutexattr_t *attr)
int pthread_mutex_destroy(phtread_mutex_t*mutex);

加鎖和解鎖

int pthread_mutex_lock(pthread_mutex_t*mutex);
int pthread_mutex_trylock(pthread_mutex_t*mutex);
int pthread_mutex_unlock(pthread_mutex_t*mutex);

讀寫鎖

初始化和destroy

int pthread_rwlock_init(pthread_rwlock_t*rwlock, const pthread_rwlockattr_t * attr);
int pthread_rwlock_destroy(pthread_rwlock_t*rwlock);

加鎖和解鎖

int pthread_rwlock_rdlock(pthread_rwlock_t*rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t* rwlock);
int pthread_rwlock_unlock(pthread_rwlock_t* rwlock);
intpthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
intpthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

條件變量:

int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *attr);
int pthread_cond_destroy(pthread_cond_t  *cond);
int pthread_cond_wait(pthread_cond_t *cond, phtread_mutex_t *mutex);
int pthread_cond_signal(phtread_cond_t*cond)//發送信號
int pthread_cond_broadcast(pthread_cond_t*cond)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章