Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;互斥锁线程优先级_C++_Windows_Multithreading_Winapi_Mutex - Fatal编程技术网

C++ C++;互斥锁线程优先级

C++ C++;互斥锁线程优先级,c++,windows,multithreading,winapi,mutex,C++,Windows,Multithreading,Winapi,Mutex,我希望给一个线程赋予优先级,这样,如果两个线程正在等待互斥锁,那么优先级最高的线程总是在优先级较低的线程之前获取互斥锁 一位同事建议,通过更改线程的优先级,我应该实现这一点。我尝试使用SetThreadPriority()函数将一个等待线程设置为0(正常),另一个设置为2(最高),但这并没有像我所希望的那样影响互斥行为。锁当前总是转到请求所有权的第一个线程 那么这种行为正常吗?与我同事的想法相反?是否有一种不同的方式来赋予我可能缺少的线程优先级?或者我正在寻找一个更复杂的问题来解决?线程优先级表

我希望给一个线程赋予优先级,这样,如果两个线程正在等待互斥锁,那么优先级最高的线程总是在优先级较低的线程之前获取互斥锁

一位同事建议,通过更改线程的优先级,我应该实现这一点。我尝试使用
SetThreadPriority()
函数将一个等待线程设置为0(正常),另一个设置为2(最高),但这并没有像我所希望的那样影响互斥行为。锁当前总是转到请求所有权的第一个线程


那么这种行为正常吗?与我同事的想法相反?是否有一种不同的方式来赋予我可能缺少的线程优先级?或者我正在寻找一个更复杂的问题来解决?

线程优先级表示线程在CPU上的时间,由调度程序决定,调度程序将优先调度优先级更高的线程-它不会影响互斥体的行为,我也不知道有什么方法可以让它这样做。

通常互斥体不会有偏差。这可以作为一个临时互斥来实现,它对优先级有偏见,也可以管理饥饿。

我的问题直接涉及到线程优先级(由SetThreadPriority()定义)是否对互斥优先级有影响,而您所指的问题似乎没有影响。虽然他们很相似,但我不相信他们的回答完全相同。嗯。。对不起。它肯定回答了这个问题:“我希望给一个线程以优先级,这样,如果两个线程正在等待互斥,那么优先级最高的线程将始终在优先级较低的线程之前使用互斥。”是的,我同意,我的下一步肯定是看看你提到的问题。我只是想先确认线程优先级本身并不是一个因素。非常幸运,你在一次问答中回答了两个问题!)然而,我还要补充一点,在2个线程的情况下,这个问题定义没有多大意义。两个线程在同一“时刻”请求锁的概率很小。一个线程总是在另一个线程之前,这意味着在给定的纳秒级只有一个线程竞争锁。这意味着无论优先级如何,它都会得到锁。对于3个或更多线程来说,这更有意义,因为直接竞争的机会更多:一些线程将在“队列”中等待,而其他线程可以绕过。