Программа:Взаимное исключение не произошло в Рубине
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
$
Мой ожидается выход выше программы составляет менее 100000. Потому что вышеуказанная программа создает 10 потоков, и каждый из потока обновляет общую сумму «sum» до 10000 раз. Но во время выполнения программы обязательно произойдет взаимное исключение. Потому что здесь не обрабатывается взаимное исключение, . Поэтому я ожидаю, что менее 100 000 в качестве выпуска. Но он дает ровно 100 000 в качестве выхода. Как произошло ? Кто занимается взаимным исключением здесь? И как я экспериментирую с этой проблемой (ME).
ли вы проверить код на МРТ или JRuby? – spickermann
@spickermann Нет. Я новичок. И я не знал об этом. – mrg
@spickermann, который сказал, MRI :) – mudasobwa