首页 > 编程语言 > 详细

c# Barrier 线程回调

时间:2020-07-02 16:05:15      阅读:49      评论:0      收藏:0      [点我收藏+]

前言

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

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

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

那么是否可以这样,当小黄人生产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();
	}
}

结果是:

技术分享图片

c# Barrier 线程回调

原文:https://www.cnblogs.com/aoximin/p/13225131.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!