zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    

    结果是:

  • 相关阅读:
    PHP 函数
    PHP 循环
    PHP 数组
    PHP Switch 语句
    PHP If...Else 语句
    PHP 字符串
    PHP 变量
    用where导致group by分组字段的索引失效
    mysql之filesort原理
    Windows定时开机并开启工作软件
  • 原文地址:https://www.cnblogs.com/aoximin/p/13225131.html
Copyright © 2011-2022 走看看