Como lidar com a alteração do relógio do sistema enquanto aguardo uma variável std :: condition_variable?

Estou tentando implementar algum código de plataforma cruzada no C ++ 11. Parte desse código implementa um objeto semáforo usando umstd :: condition_variable. Quando preciso fazer uma espera temporizada no semáforo, usoespere até ou wait_for.

O problema que estou enfrentando é que parece que a implementação padrão de condition_variable em sistemas baseados em POSIX dependeno relógio do sistema, em vez do relógio monotônico (Veja também:esse problema com a especificação POSIX)

Isso significa que, se o relógio do sistema for alterado para algum tempo no passado, minha variável de condição será bloqueada por muito mais tempo do que eu esperava. Por exemplo, se eu quiser que minha variável de condição atinja o tempo limite após 1 segundo, se alguém atrasar o relógio 10 minutos durante a espera, a variável de condição será bloqueada por 10 minutos + 1 segundo. Confirmei que esse é o comportamento em um sistema Ubuntu 14.04 LTS.

Eu preciso contar com esse tempo limite para ser pelo menos um pouco preciso (isto é, pode ser impreciso dentro de alguma margem de erro, mas ainda precisa ser executado se o relógio do sistema mudar). Parece que o que eu preciso fazer é escrever minha própria versão da condição_variável que use as funções POSIX e implemente a mesma interface usando o relógio monotônico.

Parece muito trabalho - e meio que uma bagunça. Existe alguma outra maneira de solucionar esse problema?