4

根据标题,如何在 boost::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() 调用。

4

3 回答 3

10

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

boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::try_lock);

if (!lock.owns_lock())
    return -1;

...
于 2012-11-15T10:50:38.473 回答
6
boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::defer_lock);
lock.try_lock()
于 2012-11-15T10:46:00.457 回答
4

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

boost::unique_lock<boost::mutex> lk(myMutex, boost::try_to_lock);
if (lk)
  doTheJob();
于 2013-11-20T06:18:13.710 回答