概要
Mutex#try_lock -> bool
詳細
mutex をロックしようとして、ロックが成功した場合、真を返します。
ロックできなかった場合にはブロックせず偽を返します。
サンプルコード
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?}" ret = @m.try_lock puts "id = #{id}, locked? = #{@m.locked?} #{DateTime.now}" if ret puts "id = #{id}, success lock" @m.sleep(rand(3)) @m.unlock else puts "id = #{id}, fail lock" end 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_try_lock.rb id = 1, locked? = falseid = 2, locked? = false id = 3, locked? = false id = 2, locked? = true 2014-08-28T22:43:08+09:00 id = 2, success lock id = 5, locked? = falseid = 3, locked? = true 2014-08-28T22:43:08+09:00 id = 3, fail lock id = 1, locked? = true 2014-08-28T22:43:08+09:00 id = 3, locked? = false 2014-08-28T22:43:08+09:00 id = 1, fail lock id = 4, locked? = true id = 1, locked? = true 2014-08-28T22:43:08+09:00 id = 5, locked? = true 2014-08-28T22:43:08+09:00 id = 5, success lock id = 4, locked? = true 2014-08-28T22:43:08+09:00 id = 4, fail lock id = 4, locked? = false 2014-08-28T22:43:08+09:00 id = 2, locked? = false 2014-08-28T22:43:09+09:00 id = 5, locked? = false 2014-08-28T22:43:10+09:00