執行緒同步的概念:多個執行緒操作同一共享資源
在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重置的事件還是乙個人工重置的事件的布林值,另乙個用於指明該事件處於已通知狀態還是未通知狀態的布林值。有兩種不同型別的事件物件。一種是人工重置的事件,另一種是自動重置...