首页 > 其他分享 >多个线程交替执行的方法

多个线程交替执行的方法

时间:2022-11-22 12:22:34浏览次数:43  
标签:多个 AutoResetEvent autoReset System 交替 线程 new null

如何实现多个线程交替执行。

这个例子中以三个线程交替执行为例子,使用AutoResetEvent来控制线程的中断。

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 多个线程交替执行
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //定义三个信号量,对三个信号量进行控制
        static AutoResetEvent A_autoReset = new AutoResetEvent(false);
        static AutoResetEvent B_autoReset = new AutoResetEvent(false);
        static AutoResetEvent C_autoReset = new AutoResetEvent(false);

        void ShowA()
        {
            for (int i = 0; i < 10; i++)
            {
                A_autoReset.WaitOne();
                Console.WriteLine("A" + i.ToString());
                Thread.Sleep(200);
                B_autoReset.Set();
            }
        }
        void ShowB()
        {
            for (int i = 0; i < 10; i++)
            {
                B_autoReset.WaitOne();
                Console.WriteLine("B" + i.ToString());
                Thread.Sleep(200);
                C_autoReset.Set();
            }
        }
        void ShowC()
        {
            for (int i = 0; i < 10; i++)
            {
                C_autoReset.WaitOne();
                Console.WriteLine("C" + i.ToString());
                Thread.Sleep(200);
                A_autoReset.Set();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Task.Run(() => ShowA());
            Task.Run(() => ShowB());
            Task.Run(() => ShowC());
            //new Action(ShowA).BeginInvoke(null, null);
            //new Action(ShowB).BeginInvoke(null, null);
            //new Action(ShowC).BeginInvoke(null, null);
            A_autoReset.Set();
        }
    }
}

 

执行结果:A0-B0-C0-A1-B1-C1  ……  A9-B9-C9

标签:多个,AutoResetEvent,autoReset,System,交替,线程,new,null
From: https://www.cnblogs.com/hanzq/p/16914738.html

相关文章

  • ListView中getView的原理+如何在ListView中放置多个item
    一.ListView和Adapter的基础工作原理:ListView针对List中每个item,要求adapter“给我一个视图”(getView)。一个新的视图被返回并显示如果我们有上亿个项目要显示......
  • [Python] 多线程 概念 使用
    python多线程1.线程的概念线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程......
  • 合并多个js,css文件的方法:在服务端合并js和css文件
    合并所有的js和css文件可以减少HTTP请求,这样能提升访问速度。通常为了开发的方便,我们会把js按用途分类,这样就会有很多js文件,比如sablog的jscript文件夹里就有10几个文件,这......
  • 线程方法
    线程方法停止线程packagecom.deng.state;//测试stop//1.建议线程正常停止-->利用次数,不建议死循环//2.建议使用标志位-->设置一个标志位//3.不要使用stop或者desto......
  • Nginx配置多个域名以及一个域名多个端口
    转:Nginx配置多个域名以及一个域名多个端口 域名后边带着端口如何设置? ......
  • 线程、GIL、协程
    1.多进程实现TCP服务端并发1.之前我们学习了一个服务端对应一个客户端的操作,但是我们无法实现一个服务端对应多个客户端的操作。因此我们需要在pycharm的右上角点击倒三......
  • 【《硬件架构的艺术》读书笔记】03 处理多个时钟(1)
    3.1介绍单时钟设计更易于实现,也更少出现亚稳态、建立和保持时间违例方面的问题。但在实践中,很少有设计只在一个时钟下运行。3.2多时钟域多个始终可以有以下一种或多种......
  • 第四章-线程间的同步操作 4-3 有时间限制的等待
    Waitingwithatimelimit1.Clocks时钟前面介绍的阻塞调用会将线程挂起一段(不确定的)时间,直到相应的事件发生。但在某些情况下,有时可能想要限制等待的时间。这里有......
  • 线程、携程
    目录并发编程3.进程16)互斥锁(1)什么是互斥锁(2)互斥锁如何使用(3)互斥锁解决模拟抢票问题4.线程1)线程理论2)创建线程的多种方式(1)利用函数方法创建(2)利用面向对象方法......
  • 多进程并发,互斥锁,创建线程,线程多种方法,GIL全局解释器锁,进程线程池,协程
    目录多进程并发,互斥锁,创建线程,线程多种方法,GIL全局解释器锁,进程线程池,协程今日内容概要今日内容详细多进程实现TCP服务端并发互斥锁代码实操线程理论创建线程的两种方式线......