c++ - 具有增加的所有者线程优先级的同步原语

标签 c++ multithreading winapi synchronization thread-priority

我有一个程序,其中有时会发生突发事件,以便线程在可能的情况下将CPU负载超过100%,但实际上,它们为CPU而战。至关重要的是,获得同步原语所有权的线程比应用程序的其他线程具有更高的优先级,以防止线程获得所有权并被调度程序暂停的情况。在C++(最新的草案)或WinAPI中是否有合适的同步原语,还是我必须将互斥锁代码包装在SetThreadPriority()调用中?

最佳答案

这实际上不是问题。如果拥有同步原语的线程被调度程序暂停,那仅仅是因为有足够的随时运行的线程来保持所有内核繁忙。在那种情况下,没有特别的理由去关心哪个线程运行。
等待同步原语的线程尚未准备好运行。因此,如果您有四个核心,并且没有阻塞持有同步原语的线程,那只能是因为有四个线程都准备好运行,它们可以在不持有同步原语的情况下向前发展。在那种情况下,运行这四个线程与运行包含同步原语的线程一样好。
我强烈敦促您不要搞乱线程优先级,除非您真的别无选择。一旦开始弄乱线程优先级,上面的参数就会停止成立,因为您会遇到诸如优先级倒置之类的问题。但是,如果您不搞乱线程优先级,那么您就不会遇到这类问题,并且调度程序将足够聪明,可以在99%的时间内完成正确的事情。尝试弄乱优先级以使其正确执行,这可能会持续1%的时间适得其反。

关于c++ - 具有增加的所有者线程优先级的同步原语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62723181/

相关文章:

c++ - 局部静态指针变量不是线程安全的?

java - 如何发布两个线程的结果(以较早获得结果的为准)?

c - Pthread 属性使用

c - 安全标识符 "directory"导致我的程序崩溃

c# - Win32 API GetMenuItemInfo 仅返回项目文本的第一个字符

c++ - 返回带有 vector 的 std::string

c++ - 错误 411 需要长度 c++,libcurl PUT 请求

unit-testing - 如何在 Windows 上安装 pgTAP?

c++ - 为什么 uint128_t 没有 uint128_t 的移位重载?

java - Spring如何使用ThreadLocal变量