11 5 4執行緒 同步裝置之Exchanger

2021-08-26 22:56:17 字數 1936 閱讀 2893

/**

*exchanger

讓兩個執行緒互換資訊 *

例項模擬服務生和顧客

,服務生往空杯子中倒水

,顧客從裝滿水的杯子中喝水

,然後互換杯子

,服務生接著倒水

,顧客接著喝水.

*/ /** *使用

exchanger

的關鍵技術點如下:

*1.初始化exchanger

物件時,

可以通過泛型指定杯子能交換的資訊型別.如

"new

exchanger

;"表示只能交換

string

型別的資訊 *

2.exchanger

的exchange

方法表示當前執行緒準備交換資訊

,等待其他執行緒與它交換資訊

.當有其他執行緒呼叫該

exchanger

物件的exchange

方法時,

立即交換資訊 */

publicclassexchangertest

//添水

,假設需要5s

publicvoidaddwater()catch(interruptedexception e)

this.

full

=true; }

}//喝水,

假設需要

10s

publicvoiddrinkwater()catch(interruptedexception e)

this.

full

=false; }

}}publicstaticvoidtestexchanger()

}catch(interruptedexception ex)}}

//顧客執行緒

classcustomerimplementsrunnable

}catch(interruptedexception ex)}}

newthread(newwaiter()).start();

newthread(newcustomer()).start(); }

publicstaticvoidmain(string... args)}

/**

waiter

是模擬服務生的執行緒

,首先往空杯子中添水

,然後呼叫

exchanger

的exchange方法,

等待和別人交換杯子

.customer

是模擬了顧客的執行緒

,首先把裝滿水的杯子喝光

,然後呼叫

exchange

的exchange方法,

等待和別人交換杯子

.當服務生和顧客都準備交換杯子時,由

exchanger

將服務生手中裝滿水的杯子和顧客手中的空杯子交換

.服務生可以繼續倒水

,而顧客可以繼續喝水.

*/

Qt之執行緒同步

qt中實現了如下類,提供執行緒同步機制 qmutex 互斥量。用來確保同一時刻,只能有乙個執行緒訪問某一資源。qreadwritelock 讀寫鎖。允許同一時刻多個執行緒讀取某一資源,但只要有乙個執行緒在寫該資源,則不允許其他程同時讀取該資源。qwaitcondition 等待條件。提供了乙個條件變...

執行緒同步之Semaphore

之前和大家分享過countdownlatch和cyclicbarrier 相關鏈結 下面說個場景,例如我有乙個資源,只想讓2個執行緒訪問,當乙個執行緒釋放了資源,其他執行緒才可以有機會訪問這個資源,這樣的場景用之前的執行緒同步工具好像都不太好使,所以這裡給大家介紹乙個新的工具semaphore,廢話...

VS C 執行緒篇之執行緒同步

執行緒同步解決 不同執行緒函式的執行順序,進行執行緒協調。api dword winapi waitforsingleobject handle hhandle,物件控制代碼 thread event job mutex process semaphore waitable timer memory...