一个线程可以在关键部分的中间被抢占吗?

Wat*_* v2 1 .net c windows clr multithreading

是否可以通过禁用Windows中的中断来实现关键部分锁定?如果是这种情况,那么当一个线程处于临界区的中间时,它就不能被抢占.

但是,如果是这样的话,也就是说,如果在执行一个关键部分线程不能被抢占,这样做只能让整点脉冲有些显示器不那么重要比起来,如果线程可能被要求撤离CPU即使在它正处于关键部分的中间.

所以,我真正的问题是:

  1. 如何在Windows中实现监视器?

  2. 线程在关键部分的中间是否可以被抢占?

Har*_*ton 7

Windows的设计使得线程(即使在内核模式下运行)始终是可抢占的并且始终可以中断.因此,关键部分肯定不是通过禁用中断来实现的,并且不会阻止抢占.

实际上,如果用户模式线程可以阻止中断和/或抢占,那么用户模式进程无意中崩溃整个系统将是微不足道的.因此,没有现代操作系统按照您的建议行事.

在Windows中,监视器通常使用条件变量来实现,条件变量由线程调度程序作为基元提供.我相信POSIX也是如此.