互斥锁的可升级所有权如何影响其他线程
How does the upgradable ownership of a mutex affect other threads?
情况如下:
一个线程获得了一个boost:: shared_互斥锁的可升级所有权,并且正在调用unlock_upgrade_and_lock(),这会阻塞,因为其他线程同时拥有同一个shared_互斥锁的共享所有权。
第一个线程的可升级所有权是否会阻止(阻止)其他线程在试图"lock_shared"shared_mutex时,使所有已经共享所有权的线程最终解锁并保证第一个线程的独占所有权?
或者只要有另一个线程共享互斥锁,第一个线程就有可能保持阻塞?
(假设Boost实现模糊地模拟了Howard Hinnant的WG21提案…)
从共享所有权转换为升级所有权可以防止任何新线程获取锁,因此最终所有共享所有者都会释放锁,具有升级所有权的线程可以将其转换为独占所有权。这就是"升级锁"相对于共享锁和排他锁的意义所在,参见N3427中的解释:
请注意,另一种尝试转换从共享到独占的设计,而不是如图所示从共享到升级的设计,将容易出现更新(写入器)不足的情况。这是因为只要存在多个搜索器(共享锁),就没有一个搜索器能够成功地尝试转换为更新程序。只有成功地将自己注册为拥有升级所有权的单个线程,然后阻止从升级到独占的转换,才能使实现开始阻止新的搜索者获得共享锁,以便在清除现有搜索者时最终获得独占锁。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- 为什么线程对类变量所做的更改没有影响?
- 线程会影响树莓派的图像处理性能吗?
- 联接线程如何影响主线程中的执行顺序?
- 从第二个线程调用Qt信号有效 - >对连接的插槽没有影响
- 线程更新全局指针时对全局指针的影响
- 为什么跨线程更改共享变量的代码显然没有受到竞争条件的影响
- 内存分配对多线程性能的影响
- 如果多个线程使用同一对象,性能是否受到影响
- 完成的线程是否对 winapi 中的主程序有影响
- 快板5线程影响帧率
- OpenMP线程多于工作对性能的影响是什么?
- 互斥锁的可升级所有权如何影响其他线程
- 通过struct将参数传递给CreateThread(),并在不影响前面线程的情况下更改后续线程的成员
- setrlimit()不影响派生的std::线程
- 从Q线程影响Q对话框
- 进程退出和对线程的影响
- 线程变量的声明和影响