From: Yusuke ENDOH Date: 2010-05-06T19:58:15+09:00 Subject: [ruby-dev:41183] Re: MonitorMixin::ConditionVariable#wait timeout 遠藤です。 2010年5月6日19:39 Tanaka Akira : > また、[ruby-dev:41162] で指摘されているように、 > システムの時刻が変わる場合、プログラマの意図が relative time なのに > absolute time で実装すると、時刻を進める場合は意図よりも早くタイムアウトし、 > 時刻を巻き戻す場合は意図よりも遅くタイムアウトします。 > 早いのは再度待てばいいことですが、遅いのは取り返しがつかないかもしれません。 Mutex.sleep は pthread_cond_timedwait で実装されているため、API 上で relative time を受け取ってもシステムクロック変更対策は実現できないの ではないでしょうか。 >> 絶対時刻指定も new feature なので、今から 1.9.2 に盛り込むべきでない >> と思いますが、実装する人がいるなら断固反対というほどではありません。 > > とりあえず race は気にしないことで API だけ Time も受け付けるようにするなら > ConditionVariable#wait の先頭に > > ?# xxx: mutex.sleep should support Time argument. > ?timeout = timeout - Time.now if timeout.kind_of? Time > > と入れるとかでしょうか。 えーー。と思いますが、CV#wait に timeout を入れた akr さんは一時的に thread.rb のメンテナであると考えます。[Bug #2629] の件もあわせて引き とって頂けるなら、反対しません。 -- Yusuke Endoh