互斥锁 - 定时锁定

时间:2014-04-13 07:42:35

标签: c linux mutex

我想锁定互斥锁,但是如果超时到期则失败。此外,我不想在超时后等待更多。

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

1 个答案:

答案 0 :(得分:2)

你对pthread_mutex_timedlock()的限制是正确的。它的时钟总是基于挂钟时间。

然而,pthread_cond_timedwait()并非如此。您可以修改条件变量的属性,以便它使用CLOCK_MONOTONIC(使用pthread_condattr_setclock())。你的定时锁实际上会变成定时等待。

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