C++ 具有更高所有者线程优先级的同步原语

C++ 具有更高所有者线程优先级的同步原语,c++,multithreading,winapi,synchronization,thread-priority,C++,Multithreading,Winapi,Synchronization,Thread Priority,我有一个程序,在这个程序中,有时会发生突发事件,因此如果可能的话,线程会将CPU的负载提高到100%以上,但实际上,它们会为CPU而战。获得同步原语所有权的线程获得比应用程序的其他线程更高的优先级是至关重要的,这样可以防止线程获得所有权并被调度程序暂停的情况。是否有一个合适的同步原语在C++(最新的草稿)或WiLAPI中,或者我必须在MutuxSuxRelePrimy()/code >调用中调用互斥锁码,这是不是一个问题。如果拥有同步原语的线程被调度程序暂停,那只是因为有足够的线程准备运行,以使

我有一个程序,在这个程序中,有时会发生突发事件,因此如果可能的话,线程会将CPU的负载提高到100%以上,但实际上,它们会为CPU而战。获得同步原语所有权的线程获得比应用程序的其他线程更高的优先级是至关重要的,这样可以防止线程获得所有权并被调度程序暂停的情况。是否有一个合适的同步原语在C++(最新的草稿)或WiLAPI中,或者我必须在MutuxSuxRelePrimy()/code >调用中调用互斥锁码,这是不是一个问题。如果拥有同步原语的线程被调度程序暂停,那只是因为有足够的线程准备运行,以使所有核心保持忙碌。在这种情况下,没有特别的理由关心哪个线程在运行

等待同步原语的线程尚未准备好运行。因此,如果您有四个内核,并且保存同步原语的线程没有被阻塞,那么这只是因为有四个线程都准备好运行,它们可以在不保存同步原语的情况下向前推进。在这种情况下,运行这四个线程与运行保存同步原语的线程一样好


我强烈建议您不要弄乱线程优先级,除非您真的别无选择。一旦你开始搞乱线程优先级,上面的论点就会停止,因为你会遇到优先级反转之类的问题。但是如果你不乱处理线程优先级,那么你就不会遇到这些问题,调度器将足够聪明,99%的时间都能做正确的事情。试图干扰优先级以使其做正确的事情,这可能会适得其反。

您正在寻找的机制称为优先级继承协议。Pthreads提供了对这种配置的支持,其思想是,如果高优先级任务正在等待由低优先级任务持有的资源,则低优先级任务将提升到该高优先级,直到它放弃该资源


寻找刘和莱兰,他们在70年代初写下了大部分。至于C++,恐怕是1973个版本中的几个版本。

有些线程更重要,因为它们为其他线程填充了工作队列。而且处理时间也不相等:线程A必须花费1秒的时间为线程B生成10秒的工作。@SergeRogatch这些事情永远不会成为问题,原因有两个:1)如果没有调度任何准备运行的线程,那么当前有足够的工作要做。2) 当有工作要做时,每个线程将获得大致相同的时间量,因此需要较少时间来完成工作的线程不会挨饿。(调度器是智能的。让它完成它的工作。)