MRI ruby(2.0.0)といくつかのグローバル変数を使って競合状態を作るのは簡単なのだろうかと思っていたのですが、そう簡単ではないことがわかりました。ある時点で失敗するはずですが、そうではなく、10分間実行しています。これは私がそれを達成しようとしてきたコードです:
def inc(*)
a = $x
a += 1
a *= 3000
a /= 3000
$x = a
end
THREADS = 10
COUNT = 5000
loop do
$x = 1
THREADS.times.map do Thread.new { COUNT.times(&method(:inc)) } end.each(&:join)
break puts "woo hoo!" if $x != THREADS * COUNT + 1
end
puts $x
予想される競合状態を生成 (または検出) できずwoo hoo!
、Ruby MRI 2.0.0 で出力を取得できないのはなぜですか?