Serviceboy 发表于 2012-12-10 13:23:42

AutoResetEvent和ManualResetEvent的异同

<div id="cnblogs_post_body">一般情况下多线程总是无序的,要使其按照一定的顺序执行(比如B线程必须在A线程执行完毕之后才执行)。可以采用调用Thread的Join方式,也可以使用“信号”类的方式完成此任务。常见的信号类有AutoResetEvent和ManualResetEvent。一般情况下,可以给它们的默认构造函数传入false,这就表示当前初始化该信号源准备发送信号,当调用了WaitOne方法的时候把当前的线程阻塞,直到接受到信号为止(发送信号使用Set函数)。下面是一个例子:

<div class="cnblogs_code">public class Example    {      /// <summary>      /// 预备信号,准备发送,初始化      /// </summary>      public static AutoResetEvent flag = new AutoResetEvent(false);      public void Begin()      {            Thread th = new Thread(() =>             {                for (int i = 1; i < 6; i++)                {                  Thread.Sleep(1000);                  Console.WriteLine("子线程数据:"+i);                }                flag.Set();            });            th.IsBackground = true;            th.Start();      }      static void Main(string[] args)      {            Example e = new Example();            e.Begin();            //等待该信号接受到完毕,才执行主线程中的任务循环            flag.WaitOne();            for (int i = 1; i < 6; i++)            {                  Thread.Sleep(1000);                  Console.WriteLine("主线程数据:"+i);            }      }    }
页: [1]
查看完整版本: AutoResetEvent和ManualResetEvent的异同