Tbpgr Blog

元エンジニア 人事 tbpgr(てぃーびー) のブログ

Ruby | Mutex | unlock

概要

Mutex#unlock -> self

詳細

mutex オブジェクトのロックを解除する。

サンプルコード
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 unlock 1
1
inner unlock 2
2
inner unlock 3
3
inner unlock 4
4
inner unlock 5
5

※参考までに Mutex がなかった場合

5
5
5
5
5