これがあまり役に立たないことはわかっていますが、スレッドに何かが起こるのを待つか、何かが起こるまで待つだけにしたいときはいつでも条件変数を使用します。
私が条件変数を使用する場所の非常に一般的なパターンは、バックグラウンド スレッドが数分ごとにウェイクアップして何らかの処理を行ってからスリープ状態に戻ることです。シャットダウン時に、メインスレッドはバックグラウンドスレッドに終了するように通知し、終了するように参加します。バックグラウンド スレッドは、タイムアウトを使用して状態を待機し、スリープを実行します。
バックグラウンド スレッドは、この基本的なロジックに従います
void threadFunction() {
initialisation();
while(! shutdown()) {
backgroundTask();
shutdown_condition_wait(timeout_value);
}
cleanup();
}
これにより、バックグラウンド スレッドが迅速かつ正常にシャットダウンされます。
そのようなスレッドが多数ある場合、メイン関数はそれぞれにシャットダウンするように通知し、次から次へと参加します。これにより、各スレッド コンポーネントが並行してシャットダウンできるようになります。