前言
假如现在有一个这样的需求,我一堆小黄人生产小黄丹,而大黄人要一直吃小黄丹。
如果是这样的话,想到就是一堆小黄人作为一个多线程,然后一直制造,然后另外一个大黄人一直检索是否有小黄丹,有就吃掉。
但是这样是相当消耗性能的,因为大黄人一直在检索啊。
那么是否可以这样,当小黄人生产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();
}
}
结果是: