我有以下关于 C1x 互斥体的问题(§7.25.4):
在哪些情况下mtx_lock()
可以返回thrd_busy
而不是阻塞? mtx_timedlock()
在哪些情况下可以返回thrd_busy
?
请注意,thrd_busy
在 §7.25.1 ¶5 中定义为“当测试和返回函数请求的资源已在使用中时”返回。
我希望 thrd_busy
仅由 mtx_trylock()
返回,或者最多也由 mtx_lock()
返回,当使用 mtx_try
或 mtx_try | mtx_recursive
互斥量,但绝对不是来自 mtx_timedlock()
,它需要一个支持超时的互斥量,即 mtx_timed
或 mtx_timed | mtx_recursive
互斥。
这是草案中的公正和疏忽吗?还是我遗漏了什么?
最佳答案
如果互斥量不是递归的,但您尝试以递归方式锁定它,则行为未定义。但是,实现可以检测到这一点并返回 thrd_busy
。 (或者,它可能永远阻塞,或者返回thrd_error
,或者thrd_success
,或者格式化你的硬盘......)
关于c - thrd_busy 和 mtx_lock()/mtx_timedlock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312971/