WaitHandle——使用AutoResetEvent

来源:互联网 发布:软件推广策划案 编辑:程序博客网 时间:2024/06/14 17:59



区别ManualResetEvent


     使用AutoResetEvent和使用ManualResetEvent是完全相同的,只有一点区别:在使用autoresetevent时,在调用waitOne后,会自动执行到一个reset方法。

  AutoResetEvent的waitone相当于将ManualResetEvent.waitone和reset合并为一个方法执行。

  需要注意:autoresetevent的waitone和reset合并为了一个原子操作;


  代码示例:



namespace 使用AutoResetEvent{    class Program    {        AutoResetEvent mre = new AutoResetEvent(false);        static void Main(string[] args)        {            Thread.CurrentThread.Name = "main ";            Program p = new Program();            Thread worker = new Thread(p.ThreadEntry);            worker.Name = "worker";            worker.Start();            Console.WriteLine("main :start worker");            p.mre.Set();            Thread.Sleep(100);            Console.WriteLine("main:worker go...");            p.mre.Set();            Thread.Sleep(100);        }        void ThreadEntry() {            int i = 0;            string name = Thread.CurrentThread.Name;            while (i<10)            {                mre.WaitOne();   //这里实际上是waitone和reset************                Console.WriteLine("{0}:{1}---{2}",name ,i,DateTime .Now .Millisecond);                i++;            }                        }    }}







0 0
原创粉丝点击