假设有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 astd::shared_mutex
block any attempts to furtherlock_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 – 线程尝试std :: lock [_unique] std :: shared_mutex可以被调用std :: lock_shared的线程饿死吗?全部内容,希望文章能够帮你解决c – 线程尝试std :: lock [_unique] std :: shared_mutex可以被调用std :: lock_shared的线程饿死吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)