5

我对 C1x 互斥锁(第 7.25.4 节)有以下疑问:

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

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

当使用 a或mutex调用时,我希望thrd_busy仅由mtx_trylock()或最多返回,但绝对不是 from ,这需要一个支持超时的互斥锁,即 a或互斥锁。mtx_lock()mtx_trymtx_try | mtx_recursivemtx_timedlock()mtx_timedmtx_timed | mtx_recursive

这是草案中的公正和监督吗?还是我错过了什么?

4

2 回答 2

10

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

于 2011-06-27T10:04:18.263 回答
1
  1. mtx_lock() 不返回 thrd_busy,但是,如果请求的资源已在使用中,mtx_trylock 函数将返回 thrd_busy。
  2. mtx_timedlock() 不返回 thrd_busy。mtx_timedlock 函数在成功时返回 thrd_success,如果在未获取请求的资源的情况下达到指定的时间,则返回 thrd_timedout,如果无法满足请求,则返回 thrd_error。
于 2014-08-18T08:33:12.913 回答