代码之家  ›  专栏  ›  技术社区  ›  Lucas

在Qt中,如何查询QMutex或QReadWriteLock的状态?

  •  3
  • Lucas  · 技术社区  · 15 年前

    我用的是 QReadWriteLock 在我的应用程序中保护对资源对象的访问。

    对于QMutex:

    解锁未锁定的互斥锁将导致未定义的行为。

    对于QReadWriteLock:

    试图解锁未锁定的锁是一个错误,将导致程序终止。

    能够查询互斥锁的状态对于调试断言来说也非常方便,可以在开始某些操作之前测试互斥锁,我确实拥有“长寿命”锁。

    unlock()

    (和否,使用 Recursive 模式在这种情况下没有帮助)

    2 回复  |  直到 12 年前
        1
  •  1
  •   drahnr    15 年前

    QMutex m;
    
    bool queryMutexState(){
    //static QMutex lock; if you call this frequent, you may need this "protector"
    lock.lock();
    bool b(m.tryLock());
    if (b)
    m.unlock();
    //lock.unlock()
    return b;
    }
    

    尝试锁定,如果失败,则返回false(=mutex在其他地方获得),如果未锁定,则tryLock()将锁定它,因此再次解锁它并返回true(=mutex可用)

    另一个选项是一个自定义类,其成员QMutex和bool表示锁状态。这可能对您更有效,因为互斥不需要锁定和解锁来获取状态。

        2
  •  1
  •   Xorlev    15 年前

    使用 QMutex::locked() 确定互斥锁的状态。

    我不相信QReadWriteLock中有一个等价的函数。也就是说,你可以用 tryLockForRead() tryLockForWrite()