JUC同步條件變數Condition

2021-10-18 03:39:05 字數 845 閱讀 4120

condition 是乙個多執行緒協調通訊的工具類,可以讓某些執行緒一起等待某個條件(condition),只有滿足條件時,執行緒才會被喚醒,參考synchronized/wait()/notify/notifyall()

condition 的基本使用

// 1.構造帶有lock和condition的執行緒

// 2.

trycatch

(interruptedexception e)

finally

通過這個案例簡單實現了 wait 和 notify 的功能:

await:把當前執行緒阻塞掛起

signal/signalall:喚醒阻塞的執行緒

condition await()和signal()原理

執行緒 awaitthread 先通過 lock.lock()方法獲取鎖成功後呼叫了 condition.await 方法進入等待佇列,而另乙個執行緒 signalthread 通過 lock.lock()方法獲取鎖成功後呼叫了 condition.signal 或者 signalall 方法,使得執行緒

awaitthread 能夠有機會移入到同步佇列中,當其他執行緒釋放 lock 後使得執行緒 awaitthread 能夠有機會獲lock,從而使得執行緒 awaitthread 能夠從 await 方法中退出執行後續操作。如果 awaitthread 獲取 lock 失敗會直接進入到同步佇列。

圖示

執行緒同步 條件變數

當我們需要控制對記憶體資源的訪問的時候,可以用一種簡單的加鎖的方法來控制,即互斥鎖。但互斥鎖有乙個明顯的缺點,就是它只有兩個狀態 鎖定和非鎖定。而條件變數通過允許執行緒阻塞和等待另乙個執行緒傳送訊號的方法彌補來互斥鎖的不足。條件變數通常和互斥鎖一起使用。使用過程 1.呼叫pthread mutex ...

執行緒同步 條件變數

1.問題引入 互斥鎖問題,假設現在有兩個資源a和b,乙個執行緒先拿a再拿b,另乙個則相反,這樣導致的問題就是死鎖,即兩個執行緒無休止的互相等待 include include include include pthread mutex t g mtxa pthread mutex initializ...

執行緒同步 條件變數

多執行緒中條件變數的使用 執行緒同步之條件變數 include include include include include include include include using namespace std 乙個簡單的緩衝區類 struct buffer bool full return f...