如何实现多个线程交替执行。
这个例子中以三个线程交替执行为例子,使用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