相互排斥對象 Mutex
private Mutex m = new Mutex();
public void Method(){ m.WaitOne(); //運行操作 m.ReleaseMutex(); }
共享資源Semaphore
Semaphore是一個信號量,能夠讓多個資源分類型的同一時候進行。
書中一個重要的有代表性的樣例就是圖書館有多個電腦,有若干個人使用電腦的問題。是一個不錯的樣例。
有一個計數器,當信號量達到指定的最大值。就會堵塞。
等待釋放信號。方便協調工作。
思考:semaphore能夠用作某個須要大量發送數據,可是有限的線程來處理的情況,比方說1200個人須要同一時候受到一條信息,可是用了40個線程來發送。
輕量級的SemaphoreSlim
SemaphoreSlim和semaphore的作用是一樣的。可是SempahoreSlim是輕量級的,不是內核級別的。所以消耗資源比較少,效率更高,個人十分喜歡輕量級的東西。
EventWaitHandle 等待事件的發生
主要分為:ManualResetEvent和AuthoResetEvnt兩個
主要是設計一個無限循環的函數來等待條件到來以后運行某個事情。
在事情到來前,先停下來等待。
個人在現貨交易軟件中,行情的發送使用了ManualRestEvent。
由於我們無法確定行情什么時候到來。所以讓行情到來之前等待。行情一旦受到,立刻.Set(),釋放信號。
CountDownEvent 倒計時計數器
當全部的計數到了0以后,堵塞才會放開,讓系統繼續運行。
這個函數能夠用在須要多個線程運行某些操作,條件具備以后。開始運行下一步的操作。比方在金融分析系統登錄前,我們須要下載系統品種,歷史數據。新聞消息。等等多個信息的下載。這些信息的下載不適合在一個線程中去運行。
我們把每一個操作一個線程,等這些線程都結束以后,我們開始開啟主程序。用CountDownEvent非常合適
分階段同步 Barrier
書中舉得樣例非常好,小王和小李相約去參觀鳥巢,小王和小李各自從自己的家出發,會到鳥巢門口集合。
集合以后去參觀鳥巢,參觀完了以后。然后各自回家。
小王和小李,每一個人的情況不一樣,所以他們須要等待彼此都到了鳥巢以后。再開始參觀。參觀的時間可能也不太一樣,等參觀完了,須要集結。
然后再各自回家,每一個集結點,都是一個分步。適合用barrier.