Код IT
← Каталог

Асинхронность в Ruby — Синхронизация доступа к разделяемым данным

Фрагмент из «Асинхронность в Ruby»: Синхронизация доступа к разделяемым данным.

Ruby main.rb
mutex = Mutex.new
counter = 0

threads = 10.times.map do
  Thread.new do
    1000.times do
      mutex.synchronize do
        counter += 1
      end
    end
  end
end

threads.each(&:join)
puts counter  # гарантированно 10000
mutex = Mutex.new
counter = 0

threads = 10.times.map do
  Thread.new do
    1000.times do
      mutex.synchronize do
        counter += 1
      end
    end
  end
end

threads.each(&:join)
puts counter  # гарантированно 10000