Next Previous Contents

22. <6.2.2>: Synkronisering av tråder

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.


Next Previous Contents