我想锁定互斥锁,但如果超时则失败。另外,我不想在超时后等待太多。
我知道你在想什么。 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/