接上篇文章,上面的文章利用threadpool實現了執行緒的自動執行,並最後反映在了ui執行緒上,但是兩個threadpool中的執行緒怎麼同步,就需要使用threadpool中的manualresetevent。
msdn中manualresetevent解釋為:通知乙個或多個正在等待的執行緒已發生事件。
簡單的說,manualresetevent就是乙個訊號量,相信使用過多執行緒的童鞋們肯定知道執行緒互斥與同步,姑且把manualresetevent當做執行緒阻塞等待用吧。
下面上**:
class program
private void alpha(object x)
private void beta(object x)
}
這段**展示了一共兩個方法,alpha和beta方法,在main函式中,將兩個方法都加入了threadpool中,可以看到,alpha需要等0.5s,beta需要等5s。
兩個執行緒之間的同步就可以用manualresetevent來解決。alpha中呼叫manualresetevent.waitone()方法,阻塞了alpha,等待訊號量,而當beta中manualresetevent.set()呼叫後,就告訴了alpha,beta執行緒結束了,我們可以同步了,於是兩個執行緒結束。
當然這只是最簡單的應用,如果業務流程複雜後,是乙個非常大的坑,極大的可能會留下bug,還是慎用。。。最後上截圖,同時輸出的done,而不是alpha先輸出,beta後輸出
最後一句,多執行緒坑多,一定要整理好流程,還有執行緒互操作問題,要不然自己挖了坑,自己還得去補。。。
錯誤的地方望大神指正。
C ThreadPool 執行緒池的詳解及使用範例
此文章是根據烏班圖ysm的部落格修改的,並加入了自己的一些見解 執行緒和執行緒池都是進行多執行緒操作的,執行緒池是用來儲存執行緒的乙個容器,在程式建立執行緒來執行任務的時候執行緒池才會初始化乙個執行緒,執行緒在執行完畢之後並不會被銷毀,而是被掛起等待下乙個任務的到來被啟用執行任務,當執行緒池裡的執行...
同步 執行緒同步
操作執行的先後順序。同步指兩個或兩個以上隨時間變化的量在變化過程中保持一定的相對關係。同步 英語 synchronization 指對在乙個系統中所發生的事件 event 之間進行協調,在時間上出現一致性與統一化的現象。在系統中進行同步,也被稱為及時 in time 同步化的 synchronous...
11 6 執行緒 執行緒同步
除了計算機體系結構的因素以外,程式使用變數的方式也會引起競爭,也會導致不一致的情況發生。例如,可能會對某個變數加1,然後基於這個數值做出某種決定。增量操作這一步和做出決定這一步兩者的組合並非原子操作,因而給不一致情況提供了可能。1.互斥量 可以通過使用pthread的互斥介面保護資料,確保同一時間只...