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

Gia*_*ini 4 c++ multithreading boost

根据标题,如何在boost :: unique_lock上尝试try_lock?

我有这个代码:

void mySafeFunct()
{
    if(myMutex.try_lock() == false)
    {
        return -1;
    }

    // mutex ownership is automatically acquired

    // do stuff safely

    myMutex.unlock();
}
Run Code Online (Sandbox Code Playgroud)

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

jel*_*ord 10

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

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

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

...
Run Code Online (Sandbox Code Playgroud)


cpl*_*cpl 6

boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::defer_lock);
lock.try_lock()
Run Code Online (Sandbox Code Playgroud)