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

我知道你在想什么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/

10-10 17:44