c - thrd_busy 和 mtx_lock()/mtx_timedlock()

标签 c multithreading mutex c11

我有以下关于 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_trymtx_try | mtx_recursive 互斥量,但绝对不是来自 mtx_timedlock(),它需要一个支持超时的互斥量,即 mtx_timedmtx_timed | mtx_recursive 互斥。

这是草案中的公正和疏忽吗?还是我遗漏了什么?

最佳答案

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

关于c - thrd_busy 和 mtx_lock()/mtx_timedlock(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6312971/

相关文章:

C++ 线程安全总结

java - 分析java堆栈跟踪,正在运行哪些线程

java - Java中如何判断一个线程是否是主线程?

c++ - 由于进程退出期间的静态变量清理,c++ STL 映射中的段错误查找

c++ - 为什么大型本地数组会使我的程序崩溃,而全局数组却不会?

c - 过程 : Regarding proc Executable size difference

c - OS X 上的 GCC 分配的内存比预期的多

c - 获取 malloc 宏的不相关值 - M_MMAP_THRESHOLD 和 M_ARENA_MAX

multithreading - 锁定和解锁互斥体的效率如何?互斥体的成本是多少?

c - pthread_create 的段错误