執行緒同步 Barrier類

2022-05-08 23:42:14 字數 1046 閱讀 2105

barrier類:用於組織多個執行緒及時在某乙個時刻碰面。並提供了乙個**函式,每次執行緒呼叫了signalandwait方法後該**函式會被執行。

**demo:

using system;

using system.threading;

在main方法下面加入以下**片段:

static barrier _barrier = new barrier(2,b => console.writeline("end of phase ", b.currentphasenumber + 1));----------1

static void playmusic(string name, string message, int seconds)

starts to ", name, message);

thread.sleep(timespan.fromseconds(seconds));

console.writeline(" finishes to ", name, message);

_barrier.signalandwait();}}

在main方法中加入以下**片段:

var t1 = new thread(() => playmusic("the guitarist", "play an amazing solo", 5));

var t2 = new thread(() => playmusic("the singer", "sing his song", 2));

t1.start();

t2.start();

工作原理:

我們建立了barrier類,指定了我們想要同步兩個執行緒(如1行**)。在兩個執行緒中的任何乙個呼叫了 _barrier.signalandwait()方法後,會執行乙個**函式來列印出階段。

每個執行緒將向barrier傳送兩次訊號,所以會有兩個階段。每次這兩個執行緒呼叫 signalandwait方法時,barrier將執行**函式。這在多執行緒迭代運算中非常有用,可以在每個迭代結束前執行一些計算。當最後乙個執行緒呼叫 signalandwait方法時可以在迭代結束時進行互動。

C 多執行緒同步 七 Barrier

class test 結束 b.currentphasenumber 1 static void playmusic string name,string message,int seconds 開始 name,message thread.sleep timespan.fromseconds se...

QNX多執行緒同步之Barrier 屏障

之前和大家介紹過qnx上的執行緒同步方法metux和semophore,通過這兩種方法可以對乙個或者幾個資源進行加鎖,避免資源使用上的衝突。在另一種情況下,某個執行緒需要在其它執行緒完成工作後才繼續執行,這時就需要使用到執行緒同步方法barrier。舉個現實的例子,假設有三個士兵在操作一門高炮,乙個...

QNX多執行緒同步之Barrier 屏障

之前和大家介紹過qnx上的執行緒同步方法metux和semophore,通過這兩種方法可以對乙個或者幾個資源進行加鎖,避免資源使用上的衝突。在另一種情況下,某個執行緒需要在其它執行緒完成工作後才繼續執行,這時就需要使用到執行緒同步方法barrier。舉個現實的例子,假設有三個士兵在操作一門高炮,乙個...