天天看點

《C#多線程程式設計實戰(原書第2版)》——2.8 使用Barrier類

本節書摘來自華章出版社《c#多線程程式設計實戰(原書第2版)》一書中的第2章,第2.8節,作者(美)易格恩·阿格佛溫(eugene agafonov),黃博文 黃輝蘭 譯,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

本節将展示另一種有意思的同步方式,被稱為barrier。barrier類用于組織多個線程及時在某個時刻碰面。其提供了一個回調函數,每次線程調用了signalandwait方法後該回調函數會被執行。

為了學習本節,你需要安裝visual studio 2012。除此之外無需其他準備。本節的源代碼放置在booksampleschapter2recipe7目錄中。

請執行以下步驟來了解barrier類的使用:

1.啟動visual studio 2012。建立一個c#控制台應用程式項目。

2.在program.cs檔案中加入以下using指令:

《C#多線程程式設計實戰(原書第2版)》——2.8 使用Barrier類

3.在main方法下面加入以下代碼片段:

《C#多線程程式設計實戰(原書第2版)》——2.8 使用Barrier類

4.在main方法中加入以下代碼片段:

《C#多線程程式設計實戰(原書第2版)》——2.8 使用Barrier類

5.運作程式。

我們建立了barrier類,指定了我們想要同步兩個線程。在兩個線程中的任何一個調用了_barrier.signalandwait方法後,會執行一個回調函數來列印出階段。

每個線程将向barrier發送兩次信号,是以會有兩個階段。每次這兩個線程調用signal-andwait方法時,barrier将執行回調函數。這在多線程疊代運算中非常有用,可以在每個疊代結束前執行一些計算。當最後一個線程調用signalandwait方法時可以在疊代結束時進行互動。