为什么要调用boost::thread::shared_mutex块的lock_upgrade() ?
Why should call lock_upgrade() of a boost::thread::shared_mutex block?
我正在研究boost::thread的手册,他们说调用lock_upgrade()的shared_mutex的效果是"当前线程阻塞,直到可以为当前线程获得升级所有权。".
但是为什么要阻塞,因为升级所有权还不是独占所有权?
谢谢。
但是为什么要阻塞,因为升级所有权还不是独占所有权?
如果某人已经拥有独家所有权,那么没有人可以获得共享或可升级的所有权;因此,在这种情况下,lock_shared
和lock_upgrade
都将阻塞。
并且,正如评论中所指出的,只有一个线程可以拥有可升级的所有权;所以lock_upgrade
也会阻止,如果有人已经有了。
相关文章:
- 尝试构建"lock-free"数据结构C++
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 在 std::tie 中使用 std::weak_ptr::lock()
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- "lock cmpxchg"如何在装配中工作?
- std::lock 仍然导致死锁
- 如何在 Ubuntu 18.04.3 上"upgrade"到 OpenGL 3.3
- 在任何地方对C++中所有并行线程中的所有锁定和解锁实例使用相同的 std::mutex 和 lock 对象
- 我们是否需要对多线程 x32 系统使用 lock 来读取或写入 uint32_t 变量
- 使用Mutex,lock_guard,在课堂中正确地lock
- 当我调用lock()时,为什么std :: mutex会引发异常
- mutex.lock vs unique_lock
- 使用 std::lock (c++11) 的大量 CPU 负载
- 我是否必须使用neak_ptr.lock()只是为了测试它是否指向有效的对象
- std::lock() equivalent for boost::shared_mutex?
- mutex::lock() 检查一次解锁状态是否已经被另一个线程锁定?
- C++ 提升::线程可升级互斥"try upgrade lock"?