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

条件变量模式-让线程根据条件执行

时间:2018-05-12 11:55:37      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:锁定   div   指定   nbsp   pat   队列   对象状态   ado   其它   

 1     /// <summary>
 2     /// 条件变量模式
 3     /// 让线程根据条件执行
 4     /// </summary>
 5     public sealed class ConditionVariablePattern
 6     {
 7         //两个线程使用同一个锁
 8         private readonly object m_lock = new object();
 9 
10         //复合条件(此处只是简单的Boolean类型)
11         private bool m_condition = false;
12 
13         public void Thread1()
14         {
15             //在指定对象上获取排他锁
16             Monitor.Enter(m_lock);
17 
18             //在锁中原子性的测试复合条件
19             //条件不满足时
20             while (!m_condition)
21             {
22                 //临时释放锁,使其它线程能够获取它
23                 //等待另一个线程更改条件
24                 //释放对象上的锁并阻止当前线程,直到它重新获取该锁
25                 Monitor.Wait(m_lock);
26             }
27 
28             //走到这里表示条件满足,可以处理自己的业务
29 
30             //永久释放锁
31             Monitor.Exit(m_lock);
32         }
33 
34         public void Thread2()
35         {
36             //获取一个互斥锁
37             Monitor.Enter(m_lock);
38 
39             //处理业务数据,修改条件
40             m_condition = true;
41 
42             //解除线程阻塞可能会浪费一些CPU时间
43             //通知等待队列中的线程锁定对象状态的更改
44             //即释放锁之后唤醒一个正在等待的线程
45             //Monitor.Pulse(m_lock);
46 
47             //解除线程阻塞可能会浪费一些CPU时间
48             //通知所有的等待线程对象状态的更改
49             //即释放锁之后唤醒所有正在等待的线程
50             Monitor.PulseAll(m_lock);
51 
52             //释放锁
53             Monitor.Exit(m_lock);
54         }
55     }

 

条件变量模式-让线程根据条件执行

标签:锁定   div   指定   nbsp   pat   队列   对象状态   ado   其它   

原文地址:https://www.cnblogs.com/xuejietong/p/9021974.html

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