C# Monitor.Wait、Monitor.Pulse、Monitor.PulseAll

Monitor.Wait、Monitor.Pulse、Monitor.PulseAll

1.Monitor.Wait方法
当线程调用 Wait 时,它释放对象的锁并进入对象的等待队列,对象的就绪队列中的下一个线程(如果有)获取锁并拥有对对象的独占使用。Wait()就是交出锁的使用权,使线程处于阻塞状态,直到再次获得锁的使用权。

2.Monitor.Pulse方法
当前线程调用此方法以便向队列中的下一个线程发出锁的信号。接收到脉冲后,等待线程就被移动到就绪队列中。在调用 Pulse 的线程释放锁后,就绪队列中的下一个线程(不一定是接收到脉冲的线程)将获得该锁。pulse()并不会使当前线程释放锁。

 3.Monitor.Pulse方法
所有等待队列中的线程移到就绪队列。

 

会存在就绪队列、就绪队列、等待队列

 

使用场景

可应用于池类对象忙碌排队操作;如线程池、链接池、管道池。以下代码截图是abp vnext队rabbitmq得通道池得封装;

C# Monitor.Wait、Monitor.Pulse、Monitor.PulseAll

 

 

C# Monitor.Wait、Monitor.Pulse、Monitor.PulseAll

 

C# Monitor.Wait、Monitor.Pulse、Monitor.PulseAll

上一篇:剑指offer计划7(搜索与回溯算法简单版)---java


下一篇:codeblock 编译 SmartWin++项目 vc2010编译器 void __cdecl boost::throw_exception解决记录