CSAPP 第十二章:并發(fā)編程

如果邏輯控制流在時(shí)間上重疊,那么它們就是并發(fā)的。

現(xiàn)代操作系統(tǒng)提供了三種基本的構(gòu)造并發(fā)程序的方法:

  • 進(jìn)程,每個(gè)邏輯控制流都是一個(gè)進(jìn)程,由內(nèi)核調(diào)度和維護(hù),進(jìn)程有獨(dú)立的虛擬地址空間,要想共享數(shù)據(jù),必須顯示的IPC機(jī)制
  • I/O多路復(fù)用,應(yīng)用程序在一個(gè)進(jìn)程的上下文中顯示地調(diào)度它們自己的邏輯流,因?yàn)槌绦蚴且粋€(gè)單獨(dú)的進(jìn)程,所有的流共享同一個(gè)地址空間
  • 線程,由內(nèi)核進(jìn)行調(diào)度,可以看做是以上兩種方式的混合體

線程安全

當(dāng)一個(gè)函數(shù)被多個(gè)線程反復(fù)地調(diào)用時(shí),它會(huì)一直產(chǎn)生正確的結(jié)果,這個(gè)函數(shù)是線程安全的。反之,該函數(shù)是線程不安全的。

  • 四個(gè)線程不安全函數(shù)類:
    1、不保護(hù)共享變量的函數(shù)
    2、保持跨越多個(gè)調(diào)用的狀態(tài)的函數(shù)
    3、返回指向靜態(tài)變量的指針的函數(shù)
    4、調(diào)用線程不安全函數(shù)的函數(shù)
  • 線程安全函數(shù):
    可重入函數(shù):當(dāng)它們被多個(gè)線程調(diào)用時(shí),不會(huì)引用任何共享數(shù)據(jù)。

  • 死鎖:一組線程被阻塞了,等待一個(gè)永遠(yuǎn)不可能為真的條件。

  • 規(guī)避死鎖:給定所有互斥操作的一個(gè)全序,如果每個(gè)線程都是以一種順序獲得互斥鎖并以相反的順序釋放,那么這個(gè)程序就是無(wú)死鎖的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容