码迷,mamicode.com
首页 > 编程语言 > 详细

c# Barrier 线程回调

时间:2020-07-02 16:06:40      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:main   pre   string   stat   oid   人生   void   lan   lazy   

前言

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

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

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

那么是否可以这样,当小黄人生产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 线程回调

标签:main   pre   string   stat   oid   人生   void   lan   lazy   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!