• 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();
    	}
    }
    

    结果是:

  • 相关阅读:
    html_py
    PHP-FPM详解
    nginx 虚拟主机配置
    正确配置Nginx+PHP
    centos7安装Nginx
    如何让浏览器关闭后session失效
    微擎中消息响应回复 代码流程
    在vue组件库中不能使用v-for
    微信分享前面
    php接受axios数据
  • 原文地址:https://www.cnblogs.com/aoximin/p/13225131.html
Copyright © 2020-2023  润新知