码迷,mamicode.com
首页 > 编程语言 > 详细

线程同步----手控同步

时间:2015-07-18 18:18:58      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

一、ManualResetEvent类

用来使线程处于等待状态。其中有两个常用的方法:

Set():将状态置为有信号。

RestSet():将状态置为无信号。

WaitOne:等待一个事件对象变成有信号。

        [STAThread]
        public static void Main()
        {
            ManualResetEvent manRE;
            manRE = new ManualResetEvent(true);//初始状态为有信号
            bool state = manRE.WaitOne(5000, true);//在有信号状态下,即使设置了等待时间,线程也不会在WaitOne方法内等待
            Console.WriteLine("ManualResetEvent After First WaitOne -- " + state);//True
            //状态改为无信号
            manRE.Reset();
            state = manRE.WaitOne(5000, true);//无信号状态下,线程将等待指定时长
            Console.WriteLine("ManualResetEvent After second WaitOne -- " + state);//False
            Console.ReadLine();
        }

ManualResetEvent类还有WaitAny、WaitAll,用法从字面意思就能推断出。

 

二、AutoResetEnvet类

用法与ManualResetEvent类类似,唯一的区别是在WaitOne方法中。执行完WaitOne方法后,信号状态自动变换。

如果将上例中的例子用AutoResetEnvet实现一下,如下:

 1      public static void Main()
 2         {
 3             AutoResetEvent aRE;
 4             aRE = new AutoResetEvent(true); //初始为终止状态
 5             Console.WriteLine("Before First WaitOne");
 6             bool state = aRE.WaitOne(5000, true);//不等待(因为初始状态为终止状态),之后信号自动变为false。
 7             Console.WriteLine("After First WaitOne -- " + state);
 8             //状态改为无信号
 9             //aRE.Reset();//不再需要手动更改信号状态。
10             state = aRE.WaitOne(5000, true);
11             Console.WriteLine("After second WaitOne -- " + state);
12             Console.ReadLine();
13         }

 

三、Mutex类

 

线程同步----手控同步

标签:

原文地址:http://www.cnblogs.com/hzz521/p/4657201.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!