我想锁定互斥锁,但是如果超时到期则失败。此外,我不想在超时后等待更多。
我知道你在想什么。 pthread_mutex_timedlock
。但是如果系统时钟在阻塞时被更改(例如,如果有人在超时期间运行date --set
),它可以等待多年后(目前最多44)超时应该已经过期。
答案 0 :(得分:2)
你对pthread_mutex_timedlock()
的限制是正确的。它的时钟总是基于挂钟时间。
然而,pthread_cond_timedwait()
并非如此。您可以修改条件变量的属性,以便它使用CLOCK_MONOTONIC
(使用pthread_condattr_setclock()
)。你的定时锁实际上会变成定时等待。
要使用条件变量上的定时等待来实现您自己的定时锁定版本,您可以使用类似于this answer中描述的技术。