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)
boost::mutex myMutex;
boost::unique_lock<boost::mutex> lock(myMutex, boost::defer_lock);
lock.try_lock()
Run Code Online (Sandbox Code Playgroud)