APUE學習筆記 執行緒

2021-06-12 20:49:11 字數 1926 閱讀 4922

採用多執行緒模式可以採用同步程式設計,而非非同步程式設計,可以簡化程式設計;多個程序間可以很方便的共享資料;

可以通過pthread_self獲得自身的執行緒id。執行緒id只在程序內部唯一。

新建立執行緒不能保證那個執行緒先執行,新縣城可以訪問程序的位址空間,繼承執行緒的浮點環境和訊號遮蔽字。

如果任意乙個執行緒呼叫:exit,_exit,_exit,程序都會終止。

執行緒終止方式:1)從啟動函式中返回,返回值就是執行緒的退出碼。2)可以被其他執行緒取消。3)執行緒呼叫pthread_exit。

pthread_exit的入參就是現場的退出碼。

如果乙個執行緒退出,其他執行緒就可以使用函式pthread_join來訪問到其他執行緒的退出碼。呼叫這個函式的執行緒將會一直阻塞,直到指定的執行緒呼叫ptread_exit,從主函式中退出,或者被取消。如果被其他的執行緒取消,rval_ptr指定的記憶體單元就被設定為ptread_canceled。

執行緒的入口函式不要返回區域性變數的位址(記憶體可能已經被**),可以返回常量的位址(這裡錯了,應該是返回常量,數字常量位址如何獲取?)。(*void)1.或者全域性變數的位址。如果是全域性變數的話,在多個執行緒的時候要注意不要有衝突。

ptread_create和ptread_exit無型別指標引數能傳遞的數字不止乙個,可以是更複雜的結構體,但是這個記憶體必須是呼叫者完成呼叫之後必須是有效的。否則會訪問非法記憶體。錯誤的做法是使用棧中的變數位址返回。正確的方法包括:使用常量;動態申請記憶體(注意釋放記憶體,不要洩露);全域性變數(注意多個程序間的衝突);

乙個執行緒可以呼叫函式ptread_cancel來取消另外乙個執行緒。

可以註冊執行緒取消時的執行函式。可以呼叫函式ptread_cleanup_push來註冊呼叫函式,註冊順序與執行順序相反。這些函式將在:1)執行緒呼叫ptread_exit函式時;2)響應取消請求時;3)呼叫函式ptread_cleanup_pop,且產生execute不為0時執行。————如果執行緒從入口函式中返回而終止,則不會呼叫清除函式。

分離狀態的執行緒如果被取消,將不可以呼叫ptread_join等待他的終止狀態,會返回失敗。

ptread_detach可以是執行緒處於分離狀態。

執行緒同步:如果變數時唯讀的,不會產生同步問題。如果乙個讀,乙個寫,會有同步問題。

在變數修改時間多於乙個儲存器訪問週期的處理器結構中,當儲存器讀與儲存器寫的週期交叉時,會出現不一致的現象。

多執行緒的原子操作深入分析?

互斥量:互斥量結構體為ptread_mutex_t,初始化函式是ptread_mutex_init,銷毀函式是ptread_mutex_destroy。加鎖是ptread_mutex_lock,解鎖是ptread_mutex_unlock,嘗試加鎖而不阻塞(前面那個加鎖函式如果沒有成功這回阻塞)使用函式ptread_mutex_trylock。

死鎖產生:執行緒對乙個鎖加鎖兩次;兩個執行緒各加在兩個互斥量上鎖,然後在對兩外乙個執行緒已經加鎖的互斥量加鎖。

避免:1)乙個執行緒同時只加乙個鎖。2)否則的話,加鎖之前先釋放。3)如果多個鎖是有聯絡的,則對其中乙個加鎖的時候,必然對多個鎖同時加鎖。

鎖顆粒度太粗,則多個執行緒要等待相同的鎖,源自併發性的改善微乎其微。太細,則流程太過複雜。

讀寫鎖:擁有更高的並行性。多個執行緒可以同時擁有讀模式讀寫鎖,只有乙個執行緒擁有寫模式讀寫鎖。

讀寫鎖的相互關係:讀加鎖時,可以在對其加讀鎖;寫加鎖是,不可以加任何鎖;如果是讀加鎖,這個時候寫加鎖,那麼寫鎖會阻塞,並且期間不可以再加讀鎖。

初始化和銷毀函式:ptread_rwlock_init和ptread_rwlock_destroy。

相關函式:ptread_rwlock_rdlock,ptread_rwlock_wrlock,ptread_rwlock_unlock,ptread_rwlock_tryrdlock,ptread_rwlock_trywrlock。

條件變數:需要和互斥量配合一起使用。知道條件滿足才會返回。函式為:ptread_cond系列。

APUE學習 執行緒(1)

執行緒 thread 輕量級的程序 cpu排程的最小單位,相比較於程序,程序是分配資源的最小單位。之前講到的是多程序程式設計,這一部分要說的是如何在乙個程序中實現多執行緒程式設計 當然將程序部分的內容放到一起,就可以實現多程序多執行緒程式設計 posix 可移植性作業系統介面 規定了可移植性的執行緒...

APUE學習筆記 17 執行緒和訊號

by 潘雲登 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 unix 環境高階程式設計 第 2版 第 12章。2.總結了如何設定執行緒的訊號遮蔽字,以及如何使用專用線程進行訊號處理。3.執行緒的訊號遮蔽字 每個執行緒都有自己的執行緒遮蔽字,但是訊號處理函式是程序中所有執行緒...

APUE學習筆記 17 執行緒和訊號

by 潘雲登 date 2009 8 22 email intrepyd gmail.com homepage 對於商業目的下對本文的任何行為需經作者同意。寫在前面 1.本文內容對應 unix環境高階程式設計 第2版 第12章。2.總結了如何設定執行緒的訊號遮蔽字,以及如何使用專用線程進行訊號處理。...