ResetTypeとはlibctruで定義されているEventやTimerのリセットに使用される列挙型です。Eventのリセットに使用されるのは、
- RESET_ONESHOT
- RESET_STICKY
の2つです。今回はこの2つの違いについて書いていきます。
RESET_ONESHOT
RESET_ONESHOTは、Signalが送信され、Waitしているスレッドが動き出したとき自動でSignalがクリアされるのが特徴です。一般的に2つのスレッド(Signalするスレッド, Waitするスレッド)間で使用するときに用いられます。
RESET_STICKY
RESET_STICKYはRESET_ONESHOTと違い、Signalが自動でクリアされることはありません。2つ以上のスレッドが同時にその他のスレッドのSignalを待っているときに使用されます。自動でクリアされないのでクリアのし忘れに注意してください。
例
先ほどの説明をもう少しわかりやすく説明します。
例として3つのスレッドA, B, CとイベントXがあるとします。
スレッドA, Bは共にイベントXを待っています。
- イベントXがRESET_ONESHOTでリセットされている時
この時、スレッドCがイベントXにSignalを送信すると、スレッドA, BのどちらかのみがWait状態から起動し、もう片方のスレッドはWaitし続けます。もう一度イベントXにSignalを送信するともう片方のスレッドも起動します。
- イベントXがRESET_STICKYでリセットされている時
この時、スレッドCがイベントXにSignalを送信すると、スレッドA, Bの両方が起動します。もう一度イベントXを使用する場合はイベントXをクリアする必要があります。
いかがでしたでしょうか。今回は少し難しい内容になってしまいました。RESET_ONESHOTは1つのスレッド、RESET_STICKYは複数のスレッドに効果があるという認識で大丈夫だと思います。
それでは。