C#線程等待句柄


相互排斥對象 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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM