ManualResetEvent和AutoResetEvent的区别
ManualResetEvent mre = new ManualResetEvent(false); AutoResetEvent are = new AutoResetEvent(false); mre.WaitOne() //当有信号时只能运行一个线程 are.WaitOne() //有信号时可以同时运行多个线程
///Boy class
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { public class Boy { private AutoResetEvent mer; public Boy(AutoResetEvent m) { mer = m; } public void SendFloor() { Console.WriteLine("送花中"); for (int i = 0; i < 10; i++) { Console.WriteLine("..."); Thread.Sleep(500); } mer.Set(); Console.WriteLine("\r\n花已经送到MM手中了,boss"); } } }
///Main
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace ConsoleApplication1 { class Program { public static AutoResetEvent mre = new AutoResetEvent(false); static void Main(string[] args) { Boy boy = new Boy(mre); for (int i = 0; i < 3; i++) { Thread thread = new Thread(new ThreadStart(boy.SendFloor)); thread.Start(); mre.WaitOne(); Console.WriteLine("收到了吧,花我送的"); } Console.ReadLine(); } } }