c# Barrier 线程回调

前言

假如现在有一个这样的需求,我一堆小黄人生产小黄丹,而大黄人要一直吃小黄丹。

如果是这样的话,想到就是一堆小黄人作为一个多线程,然后一直制造,然后另外一个大黄人一直检索是否有小黄丹,有就吃掉。

但是这样是相当消耗性能的,因为大黄人一直在检索啊。

那么是否可以这样,当小黄人生产10颗的时候让大黄人去吃10颗,那么这样也可以达到一个0的平衡。

barrier就是这样一个调配作用。

正文

private static Barrier _barrier = new Barrier(2,a=> {
	Console.WriteLine("执行回调");
});
static void Main(string[] args)
{
	var t1 = new Thread(() => PlayMusic("the guitaist", "play ", 1));
	var t2 = new Thread(() => PlayMusic("the singer", "play ", 5));
	t1.Start();
	t2.Start();
	t1.Join();
	t2.Join();
	Console.Read();
}

static void PlayMusic(string name, string message, int seconds)
{
	for (int i = 1; i < 3; i++)
	{
		Console.WriteLine("________________");
		Thread.Sleep(TimeSpan.FromSeconds(seconds));
		Console.WriteLine($"{name} start to {message}");
		Thread.Sleep(TimeSpan.FromSeconds(seconds));
		Console.WriteLine($"{name} finishes to{message}");
		_barrier.SignalAndWait();
	}
}

结果是:

posted @ 2020-07-02 15:40  敖毛毛  阅读(259)  评论(0编辑  收藏  举报