From: Yusuke ENDOH Date: 2010-05-10T12:23:25+09:00 Subject: [ruby-dev:41245] Re: MonitorMixin::ConditionVariable#wait timeout 遠藤です。 2010年5月6日23:24 Tanaka Akira : > あとは clock_gettime で CLOCK_MONOTONIC ですかね。 > > Ruby も内部的に使える場合には使っている気がします。 なるほどと思っていたのですが、CLOCK_MONOTONIC を取得してから timeout 付き wait を行うまでの間に race があることに気づきました。 システムクロック変更に対応した timeout に必要なのは、reltime 指定では なく、CLOCK_MONOTONIC の軸における abstime の指定ではないでしょうか。 このように reltime 指定は非常に気が付きにくい race を混入させるので、 やはり入れるべきではない、という示唆のように感じます。 # timeout してすぐそのスレッドに実行権限が来ると言う保証はどうせない # ので、相対時刻の計算の誤差くらいは気にしなくてもいいのかなあという # 気もするのですが。難しい。 -- Yusuke Endoh