thrd_busy和mtx_lock()/ mtx_timedlock()

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

在哪种情况下mtx_lock()返回thrd_busy而不是阻塞? 在哪些情况下mtx_timedlock()返回thrd_busy

请注意, thrd_busy在§7.25.1¶5中定义为“ 当测试和返回函数请求的资源已被使用时 ”。

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

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

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

  1. mtx_lock()不返回thrd_busy,但是,如果请求的资源已被使用,则mtx_trylock函数返回thrd_busy。
  2. mtx_timedlock()不返回thrd_busy。 mtx_timedlock函数在成功时返回thrd_success,如果在未获取所请求资源的情况下达到指定时间则返回thrd_timedout,如果无法获得请求,则返回thrd_error。