Programm in Ruby passiert:Mutual Exclusion nicht
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
Ausgang:
$ ruby MutualExclusion.rb
100000
$
Meine erwartete Ausgabe von oben Programm ist weniger als 100.000. Weil das obige Programm 10 Threads erstellt und jeder Thread die gemeinsam genutzte Variable 'sum' auf 10.000 Mal aktualisiert. Aber während der Ausführung des Programms wird der gegenseitige Ausschluss definitiv passieren. Denn wechselseitiger Ausschluss wird hier nicht behandelt. Also erwarte ich weniger als 100.000 als Ausgabe. Aber es gibt genau 100.000 als Ausgabe. Wie ist es passiert? Wer kümmert sich hier um den gegenseitigen Ausschluss? Und wie ich dieses Problem (ME) experimentiere.
Haben Sie Ihren Code in MRI oder JRuby testen? – spickermann
@spickermann Nein. Ich bin ein Neuling. Und das war mir nicht bewusst. – mrg
@spickermann das sagte, MRI :) – mudasobwa