Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Mutex | sleep

概要

Mutex#sleep(timeout = nil) -> self

詳細

与えられた秒数の間スリープしてからロックを解放する。

サンプルコード
require "thread"
require "date"

class MutexSample
  attr_reader :count
  def initialize
    @m = Mutex.new
  end

  def sleep_test(id)
    puts "id = #{id}, locked? = #{@m.locked?}"
    @m.lock
    puts "id = #{id}, locked? = #{@m.locked?} #{DateTime.now}"
    @m.sleep(1)
    @m.unlock
    puts "id = #{id}, locked? = #{@m.locked?} #{DateTime.now}"
  end
end

ms = MutexSample.new

threads = [*1..5].map do |i|
  Thread.new do |t|
    ms.sleep_test(i)
  end
end

threads.each(&:join)

出力

$ ruby mutex_sleep.rb
id = 1, locked? = false
id = 3, locked? = false
id = 5, locked? = false
id = 1, locked? = true 2014-08-26T22:58:19+09:00
id = 2, locked? = false
id = 3, locked? = true 2014-08-26T22:58:19+09:00
id = 4, locked? = false
id = 4, locked? = true 2014-08-26T22:58:19+09:00
id = 2, locked? = true 2014-08-26T22:58:19+09:00
id = 5, locked? = true 2014-08-26T22:58:19+09:00
id = 2, locked? = false 2014-08-26T22:58:20+09:00
id = 4, locked? = false 2014-08-26T22:58:20+09:00
id = 3, locked? = false 2014-08-26T22:58:20+09:00
id = 5, locked? = false 2014-08-26T22:58:20+09:00
id = 1, locked? = false 2014-08-26T22:58:20+09:00