我在docs中发现unique_lock
可以尝试“以非阻塞方式获取锁定”。
是否unique_lock
的线程未被阻止,因为它试图以“非阻塞方式”获取锁定?如果是这样,它是否只是优雅地失败?请unlock
?
此外,由于notify_one
没有抛出,这是否意味着如果它无法通知,它也会优雅地失败?
如果可以将unique_lock
设置为不等待成功lock
但正常失败并继续unlock
和notify_one
的正常失败,那么怎么能{ {1}}这样设置?
答案 0 :(得分:1)
boost::unique_lock lock(my_lockable, boost::try_to_lock);
之类的东西可以解决问题。
lock.owns_lock()
将返回true。如果没有获得它,你不应该试图释放它。
即使没有条件等待它,也应该安全地呼叫notify_one
。