c#线程同步(3)----monitor
来源:互联网 发布:6u网络机柜 编辑:程序博客网 时间:2024/04/28 10:12
首先lock和Minitor有什么区别呢?其实lock在IL代码中会被翻译成Monitor。也就是Monitor.Enter(obj)和Monitor.Exit(obj).lock(obj){}等价为:try{ Monitor.Enter(obj) }catch(){}finally{ Monitor.Exit(obj) }所以lock能做的,Monitor肯定能做,Monitor能做的,lock不一定能做。那么Monitor额外的功能呢?
1:Monitor.TryEnter(obj,timespan)----timeout之后,就不执行这段代码了。lock可是一直会死等的。2:还有Monitor.Wait()和Monitor.Pulse()。在lock代码里面如果调用了Monitor.Wait(),会放弃对资源的所有权,让别的线程lock进来。然后别的线程代码里Pulse一下(让原线程进入到等待队列),然后在Wait一下释放资源,这样原线程的就可以继续执行了(代码还堵塞在wait那句话呢)。
也就是说,必须两个或多个线程共同调用Wait和Pulse,把资源的所有权抛来抛去,才不会死锁。
1.Monitor.Wait方法
当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有对对象的独占使用。Wait()就是交出锁的使用权,使线程处于阻塞状态,直到再次获得锁的使用权。2.Monitor.Pulse方法
当前线程调用此方法以便向队列中的下一个线程发出锁的信号。接收到脉冲后,等待线程就被移动到就绪队列中。在调用 Pulse 的线程释放锁后,就绪队列中的下一个线程(不一定是接收到脉冲的线程)将获得该锁。pulse()并不会使当前线程释放锁。
0 0
- c#线程同步(3)----monitor
- C# 线程同步之Monitor
- 线程同步之Monitor
- 同步线程2(Monitor)
- C#线程系列讲座(5):同步技术之Monitor
- C#线程系列讲座(5):同步技术之Monitor
- c#之同步线程浅析2-----Lock与Monitor
- C#线程同步——lock,Monitor,Mutex
- C#线程同步(2)- 临界区&Monitor
- C#线程系列讲座(5):同步技术之Monitor
- C#线程系列讲座(5):同步技术之Monitor
- 多线程拨号C#版(探讨lock和Monitor线程同步)
- C#线程同步(2)- 临界区&Monitor
- C# 线程同步(2)- 临界区&Monitor
- C#线程系列讲座(5):同步技术之Monitor
- 线程同步lock and monitor
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- 作为程序员,首先要自清自己是什么人
- CentOS 7.0 配置php开发环境
- rep汇编指令
- Android 全屏设置
- How to show a Power View report at the SharePoint page
- c#线程同步(3)----monitor
- 正则表达式/i,/g,/ig,/gi,/m
- 谈下自己曾经做过的2个项目,经验丰富了不少
- How to show a Power View report at the SharePoint page (Silverlight Web Part)
- log4j:WARN No appenders could be found for logger
- 编写命令解释器(二)
- gdb调试命令
- objective-c第十二章练习答案
- iOS开发笔记--去掉Navigation下方的黑线(分割线)