標籤: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.
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
C#線程等待控制代碼