[#30549] [ANN] Ruby 1.8.6 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.6 をリリースしました。

14 messages 2007/03/12

[#30553] help: lib/shell for ruby 1.9 — keiju@... (Keiju ISHITSUKA)

けいじゅ@いしつかです.

13 messages 2007/03/13
[#30585] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[#30587] Re: help: lib/shell for ruby 1.9 — keiju@... (石塚圭樹) 2007/03/15

けいじゅ@いしつかです.

[#30588] Re: help: lib/shell for ruby 1.9 — Yukihiro Matsumoto <matz@...> 2007/03/15

まつもと ゆきひろです

[ruby-dev:30590] [BUG?] Mutex or ConditionVariable for ruby 1.8[Re: Re: help: lib/shell for ruby 1.9]

From: keiju@... (石塚圭樹)
Date: 2007-03-15 09:53:46 UTC
List: ruby-dev #30590
けいじゅ@いしつかです.

In [ruby-dev:30588] the message: "[ruby-dev:30588] Re: help: lib/shell
for ruby 1.9", on Mar/15 15:45(JST) Yukihiro Matsumoto writes:

>まつもと ゆきひろです

>|>なお、chdirに関してはDir.chdirをブロック付きで呼ぶという技が
>|>使えると思います。
>|これって, thread safe です?  ちがいますよね?
>
>他スレッドがchdirしようとすると例外になりますから、とりあえ
>ずスレッドセーフです。ただ、現時点ではmutexとか使ってないん
>で微妙なタイミングで問題が発生する可能性はありますね。

たしかにスレッドセーフだけど... これだと, shell.rb には使えないかも...

どうも, Ruby1.8 の Mutex か ConditionVariable にバグがあるような気がし
ます.

添付のスクリプトを実行すると, かなりの頻度でデッドロックになります.

あと, Ruby1.9の方は大丈夫なのですが, 待ちスレッドの優先順位が気になら
ないでもないです. ConditionVariable#wait で待っているスレッドの優先度
が最低になっています.

-- cut here --
require "thread"

#Thread.abort_on_exception=true

m = Mutex.new
c = ConditionVariable.new

jobs = []

th1 = Thread.start {
  Thread.pass
  puts "th#1 syncronize enter"
  m.synchronize do
    puts "th#1 syncronize in"
    sleep 1
    jobs.delete th1
    c.signal
    puts "th#1 syncronize exit"
  end
}
th2 = Thread.start {
  Thread.pass
  puts "th#2 syncronize enter"
  m.synchronize do
    puts "th#2 syncronize in"
    sleep 2
    jobs.delete th2
    c.signal
    puts "th#2 syncronize exit"
  end
}

jobs.push th1
jobs.push th2

m.synchronize do
  while !jobs.empty?
    p jobs
    c.wait(m)
    p jobs
    sleep 0.5
  end
end





__
---------------------------------------------------->> 石塚 圭樹 <<---
---------------------------------->> e-mail: keiju@ishitsuka.com <<---

In This Thread