筆記 執行緒同步 基礎 四種同步方式

2021-08-21 20:14:44 字數 913 閱讀 7974

執行緒同步的概念:多個執行緒操作同一共享資源

在linux裡面建議鎖

執行緒同步的條件

(1)共享資源

(2)競爭關係

(3)多個物件沒有同步的機制

【3互斥量】

mutext

(1)初始化

(2)lock枷鎖

(3)unlock解鎖

【4死鎖】

(第一種)對同乙個互斥量枷鎖兩次

(第二種)兩個資源,乙個執行緒需要同時拿到兩個資源,然後每個執行緒各拿乙個資源

【5讀寫鎖】

一把鎖具有兩種狀態

寫獨佔,讀共享

寫鎖優先順序 高

【6條件變數】本身不是鎖,可以造成執行緒阻塞,通常與互斥量配合使用

pthread_cond_t

pthread_cond_wait()函式 有三個作用

1、阻塞等待條件變數滿足

2、釋放已掌握的互斥量

1、2為原子操作

3、當被喚醒,pthread_cond_wait函式返回時,解除阻塞並重新申請獲取互斥鎖

條件變數的有點:當條件不滿足的時候,執行緒阻塞,釋放cpu,沒有競爭關係(mutext有競爭關係)

【7訊號量】互斥鎖的進化版 lock減1 mutext為0(阻塞);unlock 加1 mutext 為1(非阻塞);

sem_init

提高共同訪問共享資源的數量

sem_wait 1.訊號量大於0,訊號量--

2.訊號量等於0,造成阻塞

sem_post將訊號量++ 同時喚醒在訊號量上的執行緒

總結:訊號量的初值,決定了訊號的執行緒的個數

兩個變數同時使用兩個函式,wait()-- | post()++

執行緒同步的四種方式

1 臨界區 critical section 通過對多執行緒的序列化來訪問公共資源或一段 速度快,適合控制資料訪問。優點 保證在某一時刻只有乙個執行緒能訪問資料的簡便辦法 缺點 雖然臨界區同步速度很快,但卻只能用來同步本程序內的執行緒,而不可用來同步多個程序中的執行緒。2 互斥量 mutex 為協調...

執行緒同步四種方法

執行緒同步的方法 1 wait 使乙個執行緒處於等待狀態,並且釋放所持有的物件的lock。2 sleep 使乙個正在執行的執行緒處於睡眠狀態,是乙個靜態方法,呼叫此方法要捕捉 interruptedexception異常。3 notify 喚醒乙個處於等待狀態的執行緒,注意的是在呼叫此方法的時候,並...

多執行緒同步的四種方式 事件物件

問題的引入 模仿12306多人同時搶票。解決方法 使用事件物件。事件物件也屬於核心物件,包含乙個使用計數,乙個用於指明該事件是乙個自動o重置的事件還是乙個人工重置的事件的布林值,另乙個用於指明該事件處於已通知狀態還是未通知狀態的布林值。有兩種不同型別的事件物件。一種是人工重置的事件,另一種是自動重置...