計劃:互斥在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
$
我預計上述程序的輸出小於100,000。因爲,上面的程序創建了10個線程,並且每個線程 都將共享變量'sum'更新爲10,000次。但在程序執行期間,互斥將肯定會發生。因爲, 互斥在這裏沒有處理。所以我預計不到10萬個輸出。但它的產量恰好爲100,000。 是怎麼發生的?誰在這裏處理互斥問題?我如何實驗這個問題(ME)。
你在MRI或JRuby中測試你的代碼? – spickermann
@spickermann不,我是一個新手。而我並沒有意識到這一點。 – mrg
@spickermann that said,MRI :) – mudasobwa