一种经常推荐的信号量定时等待方法是(为简洁起见):
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
ts.tv_sec += 5;
ts.tv_nsec += 3;
while (sem_timedwait(&sem, &ts) == -1 && errno == EINTR)
continue;
假设信号量未发布(即预期超时),while 循环是否保证ts
在指定的时间(或稍晚)退出?即是否保证while循环不会在指定的时间之前ts
退出?
我有一半记得在指定的时间之前sem_timedwait()
观察到退出-但我不记得那是否是因为我没有使用-check。我记得有一段时间我不太明白-check 的用途,所以我单独使用,而不是与 while-loop 和-check_ 结合使用。ts
EINTR
EINTR
sem_timedwait()
EINTR