私が理解しているように、pthread_cond_timedwaitは現在の時刻をとり、条件が通知されなければpthread_cond_timedwaitを終了する絶対時刻を計算することによって使用されます。定期的なタスクとウォールクロックの変更のためのpthread_cond_timedwait
定期的なタスクを確実に実行するためにこの関数を使用する簡単な方法がありますか?(現在の時刻とpthread_cond_timedwaitを呼び出す間の時間の変化)
私は〜毎秒実行する定期的なタスクを持っています。
do {
pthread_mutex_lock(mutex);
tx = gettimeofday + 1 second;
do_some_simple_periodic_task();
pthread_cond_timedwait(condition, mutex, tx);
pthread_mutex_unlock(mutex);
} while (!some_exit_condition);
コンテキスト(some_exit_conditionを含む)が更新されると、条件が合図されます。
モノトニックタイマーなどを使用する方法はありますか?そうでない場合、pthread_cond_timedwaitのユースケースは何ですか?追加の時間を気にしないケースの場合のみですか?
私は別のスレッドがこれを定期的に通知する解決策を見ましたが(How to make pthread_cond_timedwait() robust against system clock manipulations?)、それはハックのようです。
&いくつかの間隔(壁時計の変更が起こりにくい)でスレッドをスリープさせるより良い方法はありますか?ただちに外部条件に応答しますか?