c++ - 如何配置为非阻塞unique_lock?

标签 c++ multithreading boost locking blocking

我在 docs 中找到了unique_lock 可以尝试“以非阻塞方式获取锁”。

unique_lock 的线程是否在尝试以“非阻塞方式”获取锁时未被阻塞?如果是这样,它会优雅地失败吗?会解锁吗?

此外,由于 notify_one不抛出,是不是意味着如果不能通知,它也会优雅地失败?

如果 unique_lock 可以设置为不等待成功的 lock 而是优雅地失败并继续优雅地失败以进行 unlocknotify_oneunique_lock怎么设置成这样?

最佳答案

类似 boost::unique_lock lock(my_lockable, boost::try_to_lock); 应该可以解决问题。

lock.owns_lock() 如果已获取锁,将返回 true。如果它不是获得的,你不应该尝试释放它。

调用 notify_one 应该总是安全的,即使没有条件等待它。

关于c++ - 如何配置为非阻塞unique_lock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917817/

相关文章:

c++ - 多尺度检测循环在 OpenCV 的 HOG 检测中是如何工作的?

c++ - 如何在多个类中使用库而不会出现 "multiple definition"错误

java - 在Thread算法工作期间重绘JPanel

ios - 如何在glkview中使用dispatch_async?

c++ - const char& 作为函数的参数

c++ - enable_shared_from_this 需要什么?

c++ - 在模板中推断子类模板类型

c++ - 初始化 const 对象中的引用

c# - 在引擎盖下的阻塞任务中取消 token

c++ - 从嵌套结构调用 protected 基类函数