使用Barrier来控制线程同步示例

时间:2021-05-19

可能的输出:
复制代码 代码如下:
Working on Thread A
Working on Thread B
Thread B will sleep for 10 seconds.
Thread A will sleep for 847 seconds.
Working on Thread C
Thread C will sleep for 26 seconds.
Working on Thread D
Thread D will sleep for 351 seconds.
Working on Thread E
Thread E will sleep for 249 seconds.

All jobs have been done.

代码:
复制代码 代码如下:
using System;
using System.Threading;

class BarrierDemo
{
static Barrier _barrier = new Barrier (5, barrier => {
Console.WriteLine();
Console.WriteLine("All jobs have been done.");
});

static void Main()
{
Random r = new Random();

new Thread(Work).Start(new MyThreadArgs { ThreadId = "A",
WaitTimeCount = r.Next(1000) });
new Thread(Work).Start(new MyThreadArgs {ThreadId = "B",
WaitTimeCount = r.Next(1000) });
new Thread(Work).Start(new MyThreadArgs {ThreadId = "C",
WaitTimeCount = r.Next(1000) });
new Thread(Work).Start(new MyThreadArgs {ThreadId = "D",
WaitTimeCount = r.Next(1000) });
new Thread(Work).Start(new MyThreadArgs {ThreadId = "E",
WaitTimeCount = r.Next(1000) });
}

static void Work(object obj)
{
MyThreadArgs args = (MyThreadArgs) obj;

Console.WriteLine("Working on Thread " + args.ThreadId);
Console.WriteLine("Thread " + args.ThreadId +
" will sleep for " + args.WaitTimeCount + " seconds.");

Thread.Sleep(waitTime);

_barrier.SignalAndWait();
}

class MyThreadArgs
{
public string ThreadId { get; set; }
public int WaitTimeCount { get; set; }
}
}

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章