aver guardato la documentazione e pthread.h
, non riesco a trovare un modo per rendere l'uso pthread_mutex_timedlockCLOCK_MONOTONIC
quindi immagino che non è (al momento) possibile. Per pthread_cond_timedwait, tuttavia, è possibile utilizzare il codice come questo:
pthread_condattr_t attr;
pthread_cond_t cond;
/* ... */
pthread_condattr_init(&attr);
pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
pthread_cond_init(&cond, &attr);
ho omesso codice di controllo degli errori per chiarezza, ma naturalmente si dovrebbe fare questo.
Suppongo che sia utilizzato CLOCK_REALTIME
perché è sempre disponibile mentre in linea di principio CLOCK_MONOTONIC
è facoltativo. Inoltre, mi chiedo se impostare timeout assoluti renda più facile il recupero dopo che le chiamate di sistema vengono interrotte da segnali e simili.
Tuttavia, sembra del tutto incoerente che l'orologio può essere impostato in alcuni casi e non altri - ci realmente dovrebbe essere un pthread_mutexattr_setclock()
, ma purtroppo non sembra essere uno. Immagino che dovrai solo sperare che qualcuno non imposti l'orologio!
Non è inappropriato. Devi solo impostare il fuso orario locale dell'applicazione su UTC. –
@ MahmoudAl-Qudsi No. Ciò non impedisce il cambio dell'orologio in tempo reale. –
È possibile utilizzare un thread di watchwatch che trasmette tutte le variabili condizionate registrate nel caso in cui l'orologio salti all'indietro. –