/**
*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...