apue 第十一章 執行緒

2021-07-04 04:38:20 字數 1711 閱讀 8444

pthread_join(pthread_t tid,void **rval_ptr)

old執行緒建立了new執行緒,然後呼叫pthread_join來等待new執行緒返回,返回值為*rval_ptr

apue中提到乙個執行緒的分離狀態概念:

模擬於程序,子程序在退出中,會保留退出狀態供父程序呼叫wait/waitpid獲取

對於執行緒,p318:預設情況下,執行緒的終止狀態會儲存知道對該執行緒呼叫pthread_join;p312:pthread_join自動把執行緒置於分離狀態

而處於分離狀態的執行緒會由系統**資源

另:對已處於分離狀態的執行緒(比如在建立時設定屬性為分離狀態)呼叫pthread_join,會產生未定義的行為

可以呼叫pthread_detach(tid)將執行緒置於分離狀態。

pthread_cleanup_push/pthread_cleanup_pop

在網上查到這兩個函式是用巨集實現的,push函式中有'',因此一定要成對出現。

push()

**pop(execut)

如果執行緒在push和pop之間以pthread_exit()退出,或者響應其他執行緒對該執行緒呼叫的pthread_cancel退出,會自動呼叫push建立的清理函式

如果是return則不呼叫

當執行緒正常執行到pop時(即沒有退出),如果execute為0,則不會呼叫清理函式,否則呼叫清理函式。同時,無論是否呼叫清理函式,pop都會刪除與之對應的push函式中建立的清理函式。

互斥鎖:pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr)初始化,對於靜態pthread_mutex_t 還可以賦值為pthread_mutex_initializer進行初始化

pthread_mutex_destroy()銷毀

pthread_mutex_lock 加鎖

pthread_mutex_unlock 解鎖

pthread_mutex_trylock 不阻塞加鎖

pthread_mutex_timedlock 帶超時的加鎖,注意,timespec是絕對時間,如要等待10s,則獲取當前時間+10s;

讀寫鎖:pthread_rwlock_init(pthread_rwlock_init *restrict rwlock,pthread_rwlockattr_t *restrict attr)

pthread_rwlock_destroy()

pthread_rwlock_rdlock()/tryrdlock/timedrdlock讀鎖

pthread_rwlock_wrlock()/trwrlock/timedwrlock寫鎖

pthread_rwlock_unlock()

條件變數:pthread_cond_init(pthread_cond_t *restrict cond,pthread_condattr_t *restrict attr)

pthread_cond_wait(cond,mutex)/timewait

pthread_cond_signal

傳遞給wait兩個引數,第乙個是要等待的條件,第二個是乙個已經加鎖的互斥鎖

wait函式會對mutex解鎖,然後等待喚醒

使用這種方式的好處:在判斷完某條件不滿足時,呼叫wait函式進行等待,這時加上互斥鎖就可以防止在判斷完條件之後,呼叫wai之前,其他執行緒對條件進行修改。

APUE讀書筆記 第十一章 執行緒

新建立的執行緒可以訪問程序的位址空間,並且繼承呼叫執行緒的浮點環境和訊號遮蔽字,但是該執行緒的掛起訊號集會被清除 新執行緒時呼叫pthread self函式獲取自己的執行緒id,而不是從共享記憶體中讀出,或者從執行緒的啟動歷程中以引數的形式接收到的,因為新執行緒可能在主線程呼叫pthread cre...

modern c design 第十一章

本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...

第十一章3

第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...