首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非阻塞的Win32系统调用(如ReleaseMutex)会导致线程阻塞并允许低优先级线程运行吗?

非阻塞的Win32系统调用(如ReleaseMutex)会导致线程阻塞并允许低优先级线程运行吗?
EN

Stack Overflow用户
提问于 2019-09-27 21:16:05
回答 1查看 93关注 0票数 1

我遇到了一个问题,一个线程在某种程度上被低优先级线程抢占,尽管高优先级线程不进行任何阻塞调用。我注意到,当低优先级线程抢占高优先级线程时,高优先级线程处于系统调用的中间。具体来说,ReleaseMutex和睡眠(0)。系统调用是否有可能阻止当前线程并允许低优先级线程运行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 21:38:05

优先级只是意味着对一个线程比另一个线程有一定程度的偏好。通常情况下,线程由于某些原因无法向前推进,而优先级较低的线程则会抢先执行。

例如,想象一下,如果由于一些奇怪的边缘情况而导致ReleaseMutex碰巧出现在一些罕见的代码路径中,而处理边缘情况的代码已经被分页到磁盘上。在代码页进入之前,调用ReleaseMutex的线程还没有准备好运行,因此优先级较低的线程可以获得CPU。

我不认为这是一个特别可能的情况。但重点是,这并不能保证不发生。优先级不是一种排除方法或同步机制。当系统碰巧有选择时,这只是一种表示您喜欢什么的方式。

如果这导致了你的问题,你的设计有很大的错误。如果您试图使用线程优先级作为保证特定行为(而不是指示首选项)的方式,那么您处理的排除是完全错误的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58141416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档