thrd_busy和mtx_lock()/ mtx_timedlock()

nin*_*alj 4 c multithreading mutex c11

我有关于C1x互斥量的以下问题(§7.25.4):

在哪些情况下可以mtx_lock()返回thrd_busy而不是阻止?在哪些情况下可以mtx_timedlock()返回thrd_busy?

注意,thrd_busy在§7.25.15中定义为" 当测试和返回函数请求的资源已被使用时 ".

我希望thrd_busy只返回mtx_trylock(),或者最多也只能通过mtx_lock()一个mtx_try或mtx_try | mtx_recursive互斥锁调用,但绝对不是来自mtx_timedlock(),这需要一个支持超时的互斥锁,即一个mtx_timed或mtx_timed | mtx_recursive互斥锁.

这只是草案中的公正和疏忽吗?或者我错过了什么?

Ant*_*ams 6

如果互斥锁不是递归的,但是您尝试以递归方式锁定它,则行为是未定义的.但是,实现可以检测到并返回thrd_busy.(或者,它可能永远阻塞,或返回thrd_error,或者thrd_success,或者格式化硬盘.....)