码迷,mamicode.com
首页 > 其他好文 > 详细

对ManualResetEvent和AutoResetEvent的巩固练习

时间:2014-11-24 15:11:56      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   color   使用   sp   on   div   

      在多线程编程中,最常用到的就是线程同步问题,前段时间开发地址采集服务器,需要携带经纬度到MapAbc中采集后,返回地址,才可以进行下一条经纬度的采集,因为队列处理和解析不是同一个线程,并且是解析经纬度是异步的操作,所以就涉及到线程同步问题,所以针对这个对ManualResetEvent和AutoResetEvent两个信号量巩固练习一下。

 1 class Program
 2     {
 3         static ManualResetEvent _ManualResetEvent = new ManualResetEvent(false);
 4         static void Main(string[] args)
 5         {
 6             int i = 0;
 7             Thread _Thread = new Thread(TestFun);
 8             _Thread.Start();
 9 
10             _ManualResetEvent.Set();
11             //Thread.Sleep(100);
12             Console.WriteLine("test1");
13             Console.ReadLine();
14         }
15 
16         static void TestFun()
17         {
18             while (true)
19             {
20                 _ManualResetEvent.WaitOne();
21                 Console.WriteLine("test");
22                 Thread.Sleep(100);
23             }
24         }
25     }

当是手动时,信号量为打开状态,会一直打印test

bubuko.com,布布扣

 1 class Program
 2     {
 3         static ManualResetEvent _ManualResetEvent = new ManualResetEvent(false);
 4         static void Main(string[] args)
 5         {
 6             int i = 0;
 7             Thread _Thread = new Thread(TestFun);
 8             _Thread.Start();
 9 
10             _ManualResetEvent.Set();
11             //Thread.Sleep(100);
12             Console.WriteLine("test1");
13             Console.ReadLine();
14         }
15 
16         static void TestFun()
17         {
18             while (true)
19             {
20                 _ManualResetEvent.WaitOne();
21                 Console.WriteLine("test");
22                 Thread.Sleep(100);
23                 _ManualResetEvent.Reset();
24             }
25         }
26     }

当把信号量重置后,就不会继续打印test了

bubuko.com,布布扣

如果使用AutoResetEvent的话

 1  class Program
 2     {
 3         static AutoResetEvent _AutoResetEvent = new AutoResetEvent(false);
 4         static void Main(string[] args)
 5         {
 6             int i = 0;
 7             Thread _Thread = new Thread(TestFun);
 8             _Thread.Start();
 9 
10             _AutoResetEvent.Set();
11             //Thread.Sleep(100);
12             Console.WriteLine("test1");
13             Console.ReadLine();
14         }
15 
16         static void TestFun()
17         {
18             while (true)
19             {
20                 _AutoResetEvent.WaitOne();
21                 Console.WriteLine("test");
22 
23             }
24         }
25     }

其实跟ManualResetEvent一个原理,只是Set之后,只执行一次,需要重新再Set,WaitOne处才会继续执行下去

对ManualResetEvent和AutoResetEvent的巩固练习

标签:style   blog   http   ar   color   使用   sp   on   div   

原文地址:http://www.cnblogs.com/djzny/p/4118569.html

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