c - 互斥锁 - 定时锁定

标签 c linux mutex

我想锁定互斥锁,但如果超时则失败。另外,我不想在超时后等待太多。

我知道你在想什么。 pthread_mutex_timedlock。但是,如果系统时钟在阻塞时发生更改(例如,如果有人在超时期间运行 date --set),它可能会在超时应该过期后等待数年(目前最多 44 年)。

最佳答案

关于pthread_mutex_timedlock()的限制,您是正确的。它的时钟始终基于挂钟时间。

但是,pthread_cond_timedwait() 则不然。您可以修改条件变量的属性,使其使用 CLOCK_MONOTONIC(通过使用 pthread_condattr_setclock())。你的定时锁实际上会变成定时等待。

要使用条件变量的定时等待来实现您自己的定时锁定版本,您可以使用类似于 this answer 中描述的技术。 .

关于c - 互斥锁 - 定时锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23040132/

相关文章:

c - 是否可以在C中动态定义结构

Android MSM 内核 : copy_to_user fails

c - 为什么malloc在达到一定阈值之前不分配内存?

c++ - 在多线程 C++ 应用程序中,我是否需要互斥锁来保护简单的 boolean 值?

c - 在 C 中实现定点数的麻烦

c - 为什么 drand48() 和 friend 过时了?

c - 为什么 const void* 仍然在 C 中更新?

linux - DMA 引擎在 PowerPC Linux 上无法正确响应

c - p_threads : Condition Variable Locking

c++ - std::unique_lock 和 std::condition_variable 如何工作