CLOCK_MONOTONIC et pthread_mutex_timedlock / pthread_cond_timedwait
La pthread_mutex_timedlock documentation dit que abs_timeout
prend un CLOCK_REALTIME
. Cependant, nous savons tous qu'il est inapproprié pour le calendrier de une durée spécifique (en raison du système d'ajustements en temps).
Est-il un moyen de faire pthread de verrouillage de délai d'attente sur CLOCK_MONOTONIC
qui est portable? Il en va de même avec pthread_cond_timedwait.
- Il n'est pas inapproprié. Il vous suffit de définir votre application locale du fuseau horaire UTC.
- Pas de. Qui n'empêche pas votre horloge en temps réel à partir de la modification.
- Vous pouvez utiliser l'horloge de l'observateur de fil qui diffuse tous les inscrits climatisées variables de l'horloge sautez vers l'arrière.
Vous devez vous connecter pour publier un commentaire.
Avoir regardé la documentation et
pthread.h
, je ne peux pas trouver un moyen de faire pthread_mutex_timedlock utilisationCLOCK_MONOTONIC
donc je suppose que c'est pas (encore) possible. Pour pthread_cond_timedwait, cependant, vous pouvez utiliser le code comme ceci:J'ai omis de code d'erreur de vérification de la clarté, mais de sûr, vous devriez le faire.
Je suppose que
CLOCK_REALTIME
est utilisé parce qu'il est toujours disponible alors qu'en principeCLOCK_MONOTONIC
est facultatif. Aussi, je me demande si la configuration absolue des délais d'attente qui rend plus facile à récupérer après le système des appels interrompus par des signaux et la comme.Toutefois, il semble assez incohérent que l'horloge peut être réglée dans certains cas et pas d'autres - il faudrait vraiment un
pthread_mutexattr_setclock()
, mais, hélas, il ne semble pas en être un. Je suppose que vous aurez juste à espérer que quelqu'un n'a pas réglé l'horloge!pthread_condattr_setclock
n'est pas disponible sur OS X et je n'ai pas été en mesure de trouver une solution qui fonctionne sur OS X.Sur OS X et FreeBSD, vous pouvez utiliser
kqueue
etkevent
. Voir ma réponse ici: https://stackoverflow.com/a/31174803/432