概要
Mutex#lock -> self
詳細
mutex オブジェクトをロックする。
1つのスレッドだけがロック可能。
サンプルコード
require "thread" class Counter attr_reader :count def initialize @count = 0 @m = Mutex.new end def increment(id) @m.lock begin puts "inner lock #{id}" @count += 1 sleep rand(5) ensure @m.unlock end end end counter = Counter.new threads = [*1..5].map do |i| Thread.new do |t| counter.increment(i) puts counter.count end end threads.each(&:join)
出力
inner lock 1 1 inner lock 2 2 inner lock 3 3 inner lock 4 4 inner lock 5 5
※参考までに Mutex がなかった場合
5 5 5 5 5