如何配置为非阻塞unique_lock?

时间:2014-02-20 19:37:44

标签: c++ multithreading boost locking blocking

我在docs中发现unique_lock可以尝试“以非阻塞方式获取锁定”。

是否unique_lock的线程未被阻止,因为它试图以“非阻塞方式”获取锁定?如果是这样,它是否只是优雅地失败?请unlock

此外,由于notify_one没有抛出,这是否意味着如果它无法通知,它也会优雅地失败?

如果可以将unique_lock设置为不等待成功lock但正常失败并继续unlocknotify_one的正常失败,那么怎么能{ {1}}这样设置?

1 个答案:

答案 0 :(得分:1)

boost::unique_lock lock(my_lockable, boost::try_to_lock);之类的东西可以解决问题。

如果锁定被获取,

lock.owns_lock()将返回true。如果没有获得它,你不应该试图释放它。

即使没有条件等待它,也应该安全地呼叫notify_one