¿Cómo trato con el cambio del reloj del sistema mientras espero en un std :: condition_variable?

Estoy tratando de implementar un código multiplataforma en C ++ 11. Parte de este código implementa un objeto semáforo utilizando unastd :: condition_variable. Cuando necesito hacer una espera programada en el semáforo, usoesperar hast o wait_for.

El problema que estoy experimentando es que parece que la implementación estándar de condition_variable en sistemas basados en POSIX depende deen el reloj del sistema, en lugar del reloj monotónico (ver también:este problema contra la especificación POSIX)

Eso significa que si el reloj del sistema cambia en algún momento en el pasado, mi variable de condición se bloqueará durante mucho más tiempo de lo que esperaba. Por ejemplo, si quiero que mi condición_variable se agote después de 1 segundo, si alguien ajusta el reloj 10 minutos durante la espera, la condición_variable se bloquea durante 10 minutos + 1 segundo. He confirmado que este es el comportamiento en un sistema Ubuntu 14.04 LTS.

Necesito confiar en este tiempo de espera para ser al menos algo preciso (es decir, puede ser inexacto dentro de cierto margen de error, pero aún debe ejecutarse si cambia el reloj del sistema). Parece que lo que tendré que hacer es escribir mi propia versión de condition_variable que use las funciones POSIX e implemente la misma interfaz usando el reloj monotónico.

Eso suena como mucho trabajo, y como un desastre. ¿Hay alguna otra forma de solucionar este problema?

Respuestas a la pregunta(4)

Su respuesta a la pregunta