2016-07-07 5 views
1

私はルビー内のスレッドをいじりしていると私は私がこのruby​​で眠っているスレッドを初期化できますか?

x = 0 
a = Thread.new{ x += 1 while true } 
b = Thread.new{ x -= 1 while true } 

のような何かをしたが、私はabが同時に起動したい場合に何が起こるか見しようとしていました。 abをスリープスレッドとして初期化し、同時にスリープ状態にすることはできますか?ありがとう。

答えて

4

ルビーでは、眠っているスレッドを作成することはできませんが、他のスレッドがスリープ状態になるまで、スリープすることができます。

x = 0 
a = Thread.new{ Thread.stop; x += 1 while true } 
b = Thread.new{ Thread.stop; x -= 1 while true } 

a.run 
b.run 
+0

ありがとうございました!興味深いことに、十分な 'x'は' 0'のままです。 '[a、b] .each(&:run)'は実行しないのに対し、 'a.run'と' b.run'は同時に異なる行でスレッドを開始することに驚いています。 –

+0

興味深いことに、このコードスニペットをirbで実行したところ、約150_000_000までは 'x'ロケットが見つかってから、ランダムに上下に動き始めました。 P.S.私はMacにいる。 – Aetherus

+0

'irb'で実行すると' a'が 'b'より前に実行されるので、' 'irb''で実行しますが、' 'ruby''で' .rb'として実行するとフラットになります。 –

関連する問題