Hallo,

ich arbeite momentan an einem Programm, das zu bestimmten Zeitpunkten Aktionen ausführen soll und zwischen den Aktionen inaktiv ist.
Das Warten und Ausführen der Aktionen übernimmt hier ein Thread, im Hauptprogramm warte ich per epoll auf Daten aus verschiedenen Quellen.
Zum Ausführen von ungeplanten Aktionen kann der Hauptthread die anderen Threads über eine gemeinsame Condition Variable aufwecken.

Mein Problem ist nun, dass ich erkennen möchte, wenn die Systemzeit verändert wird, d.h. die Systemuhr umgestellt wird.
Ich habe folgendes zu einem Syscall gefunden, der per eventfd mit epoll abgefragt werden könnte:

https://lkml.org/lkml/2010/9/16/405 -- Offenbar wurden diese Patches aber nie in den Linux-Kernel übernommen.

Meine einzige Idee wäre nun in einem weiteren Thread per clock_gettime() einmal die REALTIME und MONOTONIC clocks abzufragen und zu prüfen, ob die Differenz der beiden sich verändert.
REALTIME entspricht der Systemuhr, während MONOTONIC immer nur gleichmäßig weiterläuft (NTP Adjustments fließen hier als schneller/langsamer laufen ein, aber sprunghafte Änderungen durch einen Benutzer nicht. Genau das will ich ja erkennen)

Die Nachteile liegen auf der Hand:
- Zusätzlicher Thread
- Regelmäßiges Aufwachen und prüfen nötig
- Wecken aller anderen Threads und mitteilen, dass die Zeit verändert wurde und Wartezeiten neu berechnet werden müssen

Meine Frage:
Gibt es hier eine elagantere Lösung?
Gibt es irgendeine Lösung per eventfd und epoll?
Ich habe leider nichts weiter dazu finden können, aber kann nicht glauben, dass sonst niemand vor diesem Problem stehen soll.
Bin für Infos oder Ideen dankbar!