Ответ 1
Посмотрев документацию и pthread.h
, я не могу найти способ сделать pthread_mutex_timedlock использовать CLOCK_MONOTONIC
, чтобы я предположим, что не возможно (в настоящее время). Для pthread_cond_timedwait, вы можете использовать такой код:
pthread_condattr_t attr;
pthread_cond_t cond;
/* ... */
pthread_condattr_init(&attr);
pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
pthread_cond_init(&cond, &attr);
Я пропустил проверку кода ошибки для ясности, но, конечно, вы должны это сделать.
Я предполагаю, что CLOCK_REALTIME
используется, потому что он всегда доступен, тогда как в принципе CLOCK_MONOTONIC
является необязательным. Кроме того, я задаюсь вопросом, облегчает ли установка абсолютных тайм-аутов восстановление после того, как системные вызовы прерываются сигналами и т.п.
Однако, кажется, совершенно непоследовательно, что часы могут быть установлены в некоторых случаях, а не в других - действительно, должен быть pthread_mutexattr_setclock()
, но, похоже, не существует. Думаю, вам просто нужно надеяться, что кто-то не установит часы!