如何判断QMutex是否被锁定?

Wes*_*Wes 14 c++ qt qt4

有没有人知道如何检查并查看QMutex是否被锁定,而不使用该功能:

bool QMutex::tryLock()

我不想使用tryLock()的原因是因为它做了两件事:

  1. 检查并查看互斥锁是否已锁定.
  2. 如果没有锁定则锁定它.

出于我的目的,我对执行第二步(锁定互斥锁)不感兴趣.

我只是想知道它是否被锁定.

Ern*_*ill 24

根据定义,尝试锁定互斥锁是判断它是否被锁定的唯一方法; 否则当这个虚函数返回时,你怎么知道互斥锁是否仍然被锁定?它可能在函数返回时被解锁; 或者更重要的是,如果不执行锁定它所需的所有缓存刷新和同步,您实际上无法确定它是否已被锁定.

  • -1小注释,有时知道互斥锁是否被锁定而不试图锁定它是有用的,例如出于统计目的而仍然没有干扰线程.所以尽管你的重点是,但根据定义它并不是判断它是否被锁定的唯一方法 (4认同)
  • 呃,某些东西会有用并不意味着根据定义它并非不可能. (2认同)

Wes*_*Wes 8

好吧,我猜我没有真正的方法去做我没有实际使用tryLock()的问题.

这可以通过以下代码完成:

bool is_locked = true;

if( a_mutex.tryLock() )
{
    a_mutex.unlock();
    is_locked = false;
}

if( is_locked )
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它解锁了QMutex,"a_mutex",如果它能够锁定它.

当然,这不是一个完美的解决方案,因为当它达到第二个if语句时,互斥锁的状态可能会发生变化.