C#線程等待控制代碼

來源:互聯網
上載者:User

標籤: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#線程等待控制代碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.