[#41278] [BUG:1.9] BINARY should not be ASCII-compatible — Yugui <yugui@...>

WXVndWkbJEIkRyQ5ISMbKEIKCgo+IBskQiRHISIkKiQqJGAkTSQzJDMkXiRHJE41RE9AJEclKyVQ

15 messages 2010/05/11

[#41407] [Bug #3339] win32ole test failure — Usaku NAKAMURA <redmine@...>

Bug #3339: win32ole test failure

20 messages 2010/05/25
[#41411] Re: [Bug #3339] win32ole test failure — Masaki Suketa <masaki.suketa@...> 2010/05/25

助田です。

[#41412] Re: [Bug #3339] win32ole test failure — "U.Nakamura" <usa@...> 2010/05/25

こんにちは、なかむら(う)です。

[ruby-dev:41268] Re: MonitorMixin::ConditionVariable#wait timeout

From: Yusuke ENDOH <mame@...>
Date: 2010-05-11 03:38:02 UTC
List: ruby-dev #41268
遠藤です。

2010年5月11日4:14 Masaya TARUI <tarui@prx.jp>:
> 「3 秒ごとに定期処理、シグナルされたらすぐに終了」を
> 「3 秒はリソースを開放して定期処理、シグナルされたらすぐに終了」に
> すると
>
> reltimeだと
> create_newthread
> cv.wait(m,3)
> なのに対して、
>
> abstimeだと
> create_newthread
> cv.wait(m,Time.now+3)
> としても、Time.nowを取得した後にスレッド切り替えが発生しすると、
> ロックを開放している時間が短くなってしまいます。
>
> これはreltime 指定の方がよいのではないでしょうか。
> 結局スレッド切り替えによる影響で考えるとどっちもどっちかと。


「正確に 3 秒間 Mutex を開放する」という需要があるのか、あったとして
正当なものかわからないのですが、spurious wakeup を考えると、原理的に
達成不可能な要求だと思います。


通算で 3 秒間開放することも難しそうです。

  t = 3
  until predicate
    t1 = Time.now
    cv.wait(m, t)
    # (A)
    t -= Time.now - t1
    if t <= 0
      # timeout
      predicate = true
    end
  end

spurious wakeup 後に (A) の箇所でコンテキストスイッチしたら、通算でも
3 秒間より短い期間しか開放されません。何か手があるでしょうか。

-- 
Yusuke Endoh <mame@tsg.ne.jp>

In This Thread