如何try_lock boost::unique_lock<boost::mutex>

How to try_lock on a boost::unique_lock<boost::mutex>

本文关键字:boost lock gt mutex unique 如何 try lt      更新时间:2023-10-16

根据标题,如何try_lock提升::unique_lock?

我有这段代码:

void mySafeFunct()
{
    if(myMutex.try_lock() == false)
    {
        return -1;
    }
    // mutex ownership is automatically acquired
    // do stuff safely
    myMutex.unlock();
}

现在我想使用一个unique_lock(也是一个作用域互斥锁)而不是普通的 boost::mutex。我希望这能避免来自函数体的所有 unlock() 调用。

您可以使用

Defer 构造函数延迟锁定,也可以在创建unique_lock时使用 Try 构造函数:

boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::try_lock);
if (!lock.owns_lock())
    return -1;
...
boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::defer_lock);
lock.try_lock()

以前的答案可能已经过时了。我正在使用 boost 1.53,这似乎有效:

boost::unique_lock<boost::mutex> lk(myMutex, boost::try_to_lock);
if (lk)
  doTheJob();