C#中的Monitor类
来源:互联网 发布:淘宝上相纸分类 编辑:程序博客网 时间:2024/04/29 17:26
Monitor在锁对象obj上会维持两个线程队列R和W以及一个引用T:
(1) T是对当前获得了obj锁的线程的引用(设此线程为CurrThread);
(2) R为就绪队列,其上的线程已经准备好获取obj锁。当obj锁被CurrThread释放后(CurrThread可通过Monitor.Exit(obj)或Monitor.Wait(obj)来释放其所获的obj锁)这些线程就会去竞争obj锁,获得obj锁的线程将被T引用; 线程调用Monitor.Enter(obj)或Monitor.TryEnter(obj)将会使该线程直接进入R队列。
(3) W为等待队列,其上的线程是因为调用了Monitor.Wait(obj)而进入W队列的;W上的线程不会被OS直接调度执行,也就是说它们没有准备好获取obj锁,就是说在等待队列上的线程不能去获得obj锁。当前获得obj锁的线程CurrThread调用Monitor.Pulse(obj)或Monitor.PulseAll(obj)后会使W队列中的第一个等待线程或所有等待线程被移至R队列,这时被移至R队列的这些线程就有机会被OS直接调度执行,也就是有可以去竞争obj锁。
(4) Monitor的成员方法
Monitor.Enter(obj)/Monitor.TryEnter(obj): 线程会进入R队列以等待获取obj锁
Monitor.Exit(obj): 线程释放obj锁(只有获取了obj锁的线程才能执行Monitor.Exit(obj))
Monitor.Wait(obj): 线程释放当前获得的obj锁,然后进入W队列并阻塞
Monitor.Pulse(obj) : 将W队列中的第一个等待线程移至R队列中以使第一个线程有机会获取obj锁
Monitor.PulseAll(obj): 将W队列中的所有等待线程移至R队列以使得这些线程有机会获得obj锁
- C#中的Monitor类
- C#中的lock、Monitor、Mutex
- C#中的lock和Monitor类功能相通
- 再看c#中的lock monitor 和mutex
- C#中的lock、Monitor、Mutex学习笔记
- C# Monitor
- 浅谈C# 中的lock 方法与Monitor 类的关系_以及同步与互斥
- C# 多线程中的lock,Monitor.pulse(all)&wait
- c# Monitor 关键字使用
- C# Monitor实现
- Java 中的Monitor是什么意思?
- C# 多线程 Mutex 类 Semaphore 类 Monitor 类
- c#线程同步中的lock,monitor,同步事件和等待句柄以及mutex的介绍
- C#笔记21:多线程之线程同步中的锁定lock、Monitor
- C# 线程同步之Monitor
- c#线程同步(3)----monitor
- c#中Monitor的使用
- C#使用线程Monitor.Enter()和Monitor.Exit()
- STL 之 set 源码剖析
- 创建类模式总结
- 休眠状态下,响应按键
- 第七周作业--背包问题
- Nginx学习(15)—ngx_setproctitle()
- C#中的Monitor类
- 向一个数组随机插入一个1~100的数。
- 【Go web开发之revel+mgo】第5章 样式与留言板的设计
- 历史上最知名的15位计算机科学家
- 如何成为java高级工程师
- Java的native方法 .
- java native
- 子类重写父类注意事项 java
- 各种排序算法的复杂度