我有一个应用程序,其中几个线程共享一个互斥锁。
std::lock_guard< std::recursive_mutex > lock(globalMutex_);
一个密集(T1)其他较小(T2,T3..)。我有一个例子,其中需要锁的线程在成功获取锁之前经常被阻塞 100 秒。
获取锁的线程(T1 so)通常以以下方式进行:
void func()
{
std::lock_guard< std::recursive_mutex > lock(globalMutex_);
processing();
}
globalMutex_
然后定期释放。
奇怪的行为:
T1在总共 100 秒的时间内系统地获得了锁,而其他线程根本没有获得锁
(在其他线程中,我有相同的模式,但其他函数的调用频率较低)
问题: 有什么可以解释的?这是正常行为吗?
上下文: 我在 Windows 10 / 最新版本的 Visual Studio / 64 位 / GUI 应用程序下
注意: 即使我把T2放在了高优先级,情况也是一样的。