c – 线程尝试std :: lock [_unique] std :: shared_mutex可以被调用std :: lock_shared的线程饿死吗?

前端之家收集整理的这篇文章主要介绍了c – 线程尝试std :: lock [_unique] std :: shared_mutex可以被调用std :: lock_shared的线程饿死吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于std :: shared_mutex和获取unique_lock的问题.

假设有3个主题

> 2个读者(尝试lock_shared()std :: shared_mutex),和
> 1作者(试图锁定[_unique]()std :: shared_mutex)

试图锁定[_unique]()的作者是否可能会被饿死?例如:在任何时候至少有一个读者拥有std :: shared_lock,而lock [_unique]()永远不会成功.

或多或少:会在std :: shared_mutex块上锁定[_unique]()任何进一步lock_shared()的尝试吗?

(相当确定boost :: upgrade_lock可以在这里工作,但我想知道在std :: shared_mutex上是否有任何保证裸std :: unique_lock)

解决方法

More or less: would lock[_unique]() on a std::shared_mutex block any attempts to further lock_shared() it?

该标准没有规定是否应该发生,它只说:

Effects: Blocks the calling thread until shared ownership of the mutex can be obtained for the calling thread.

因此,它是由实现是否使后来的读者等待未决的编写者.

如果实现想要阻止编写器饥饿,则可能需要在线程尝试获取唯一锁时设置“写入器等待”标志,以便稍后尝试获取共享锁将阻塞,等待独特的锁定器后面.在N2406参考实现中,这是state成员中的write_entered_位.

猜你在找的C&C++相关文章