我遇到了一个问题,一个线程在某种程度上被低优先级线程抢占,尽管高优先级线程不进行任何阻塞调用。我注意到,当低优先级线程抢占高优先级线程时,高优先级线程处于系统调用的中间。具体来说,ReleaseMutex和睡眠(0)。系统调用是否有可能阻止当前线程并允许低优先级线程运行?
发布于 2019-09-27 21:38:05
优先级只是意味着对一个线程比另一个线程有一定程度的偏好。通常情况下,线程由于某些原因无法向前推进,而优先级较低的线程则会抢先执行。
例如,想象一下,如果由于一些奇怪的边缘情况而导致ReleaseMutex碰巧出现在一些罕见的代码路径中,而处理边缘情况的代码已经被分页到磁盘上。在代码页进入之前,调用ReleaseMutex的线程还没有准备好运行,因此优先级较低的线程可以获得CPU。
我不认为这是一个特别可能的情况。但重点是,这并不能保证不发生。优先级不是一种排除方法或同步机制。当系统碰巧有选择时,这只是一种表示您喜欢什么的方式。
如果这导致了你的问题,你的设计有很大的错误。如果您试图使用线程优先级作为保证特定行为(而不是指示首选项)的方式,那么您处理的排除是完全错误的。
https://stackoverflow.com/questions/58141416
复制相似问题