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