2017-04-27 15 views
0

私はwait_event_timeoutマクロ(wait.h内)を見ていますが、返される前に常に条件をチェックするかどうかはわかりません。再度wait_event_timeoutの説明

タイムアウトが期限切れになった場合、の条件が真である場合、ゼロを返さないことを保証しますか?

マクロはかなり畳み込まれています。たぶん私はこれを証明するデモを書く必要があります....誰もシンプルで説得力のある例を提供することができますか?

- DD

+1

は確かに私が正しく理解されていません。タイムアウトと同じ瞬間に状態が真になることを意味しますか?前後の他の2つのシナリオは、コメント(http://elixir.free-electrons.com/linux/v4.10/source/include/linux/wait.h#L371)から明らかです。最後にそれは本当に重要ですか? wait_event_timeoutから復帰した後はいつでも条件を確認できます。これは、それを使用するコードの多くが何をしているかです。 – bytefire

+0

これはまさに私のケースです。 wait_event_timeoutを呼び出した後に条件を再確認するプロジェクトがあります。私は冗長コードだと思うものを削除するように提案したが、理由は説明できなかった。条件の再チェックを正当化する既知のコンパイラのバグはありませんか?それとも、まるで迷信のような心理学的なものなのでしょうか? – ddbug

答えて

0

そして答えはこれのようです: wait_event_timeoutの行動における重要な変更は、カーネルのバージョン3.10の周りに起こりました。

wait_event_timeoutは、イベントが通知されなかった場合は0を返し、何らかの理由で(割り込み、別のスレッドなどによって)真となった場合は、手動で条件を再確認する必要があります。

wait_event_timeoutは、イベントが一度も通知されなかった場合でも、指定された条件がtrueになった場合に1を返します。タイムアウトの期限が切れた後、API自体が条件チェックを行います。

wait.hのこのAPIに関するドキュメントでは、バージョン3.18以降の新しい動作が明示的に説明されています。 :) 支援するためのもの屋のための

おかげで、すべての - DD