プログラム:相互排他は、Ruby
def inc(n)
n + 1
end
sum = 0
threads = (1..10).map do
Thread.new do
10_000.times do
sum = inc(sum)
end
end
end
threads.each(&:join)
p sum
出力:
$ ruby MutualExclusion.rb
100000
$
上記のプログラムの私の予想出力が10万未満です。上記のプログラムは10個のスレッドを作成し、スレッド は共有変数 'sum'を10,000回更新します。しかし、プログラムの実行中、相互排除は間違いなく起こります。こちらでは、 の相互排除は扱わないためです。だから私は100,000以下の出力を期待しています。しかしそれは出力として正確に100,000を与える。どのように が起こったのですか?ここで相互排除を扱うのは誰ですか?そして私はどのようにこの問題を実験しますか(ME)。
あなたはMRIやJRubyの中で、あなたのコードをテストしましたか? – spickermann
@spickermannいいえ、私は初心者です。私はそれを知らなかった。 – mrg
@spickermannは言った、MRI :) – mudasobwa