Часто рекомендуемый подход к временному ожиданию на семафоре (упрощенный для краткости):
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;
Предполагая, что семафор не размещен (т.е. ожидается тайм-аут), это время l oop гарантировано для выхода во время, указанное в ts
(или чуть позже)? Т.е. гарантируется ли, что while-l oop не выйдет до времени, указанного в ts
?
Я наполовину помню, как наблюдал sem_timedwait()
, слегка выходящий до время, указанное в ts
- , но я не могу вспомнить, было ли это потому, что я не использовал EINTR
-check . Я помню, что было время, когда я не совсем понимал, для чего нужна проверка EINTR
, поэтому я использовал только sem_timedwait()
, а не в сочетании с while-l oop и EINTR
-check_.