C 互斥锁-定时锁定

C 互斥锁-定时锁定,c,linux,mutex,C,Linux,Mutex,我想锁定一个互斥锁,但如果超时过期,就会失败。另外,我不想在超时后再等待太多时间 我知道你在想什么pthread\u mutex\u timedlock。但是,如果系统时钟在阻塞时发生更改(例如,如果有人在超时期间运行date--set),它可能会在超时到期后等待数年(目前最长为44个)。关于pthread\u mutex\u timedlock()的限制,您是对的。它的时钟总是基于墙上的时钟时间 但是,对于pthread\u cond\u timedwait(),情况并非如此。您可以修改条件变

我想锁定一个互斥锁,但如果超时过期,就会失败。另外,我不想在超时后再等待太多时间


我知道你在想什么
pthread\u mutex\u timedlock
。但是,如果系统时钟在阻塞时发生更改(例如,如果有人在超时期间运行
date--set
),它可能会在超时到期后等待数年(目前最长为44个)。

关于
pthread\u mutex\u timedlock()
的限制,您是对的。它的时钟总是基于墙上的时钟时间

但是,对于
pthread\u cond\u timedwait()
,情况并非如此。您可以修改条件变量的属性,使其使用
CLOCK\u MONOTONIC
(通过使用
pthread\u condattr\u setclock()
)。你的定时锁实际上会变成定时等待


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

我很难理解您所说的“给定良好定时”是什么意思,因此我编辑了您的问题。我希望我没有改变它的意思。如果一个系统管理员不重新启动系统,他会大量更改
日期
。一个好的系统管理员应该安装一个NTP客户端,并且永远不会运行
date--set
Basile Starynkevitch:没有理由认为任何人都是好的或者做得对。