Med trådene følger det en håndfull verktøy for synkronisering av tråder;
Thread.critical=,
Mutex
og ConditionVariable
.
1| require 'thread' 2| $delt_teller = 0 3| $mutex = Mutex.new 4| 5| # Lag ti tråder som øker den delte telleren gradvis tjuefem ganger. 6| traader = (1..10).collect do 7| Thread.new do 8| 25.times do |i| 9| $mutex.synchronize do ### Synkronisert 10| gammel_verdi = $delt_teller # kodebit. 11| ny_verdi = gammel_verdi + 1 # 12| sleep 0 # Framtvinge trådproblematikk # 13| $delt_teller = ny_verdi # 14| end ### 15| end 16| end 17| end 18| 19| traader.each{|t| t.join} # Vent på alle trådene. 20| puts $delt_teller # Skal skrive ut "250". |
Det er flere synkroniseringsverktøy tilgjengelig, slik
som Queue
, SizedQueue
,
Synchronizer
og Monitor
for
å nevne noen.