class LightIO::Library::Thread::Mutex
Public Class Methods
new()
click to toggle source
# File lib/lightio/library/thread.rb, line 233 def initialize @queue = LightIO::Library::Queue.new @queue << true @locked_thread = nil end
Public Instance Methods
lock()
click to toggle source
# File lib/lightio/library/thread.rb, line 239 def lock raise ThreadError, "deadlock; recursive locking" if owned? @queue.pop @locked_thread = LightIO::Thread.current self end
locked?()
click to toggle source
# File lib/lightio/library/thread.rb, line 253 def locked? !@locked_thread.nil? end
owned?()
click to toggle source
# File lib/lightio/library/thread.rb, line 257 def owned? @locked_thread == LightIO::Thread.current end
sleep(timeout=nil)
click to toggle source
# File lib/lightio/library/thread.rb, line 261 def sleep(timeout=nil) unlock LightIO.sleep(timeout) lock end
synchronize() { || ... }
click to toggle source
# File lib/lightio/library/thread.rb, line 267 def synchronize raise ThreadError, 'must be called with a block' unless block_given? lock begin yield ensure unlock end end
try_lock()
click to toggle source
# File lib/lightio/library/thread.rb, line 277 def try_lock if @locked_thread.nil? lock true else false end end
unlock()
click to toggle source
# File lib/lightio/library/thread.rb, line 246 def unlock raise ThreadError, "Attempt to unlock a mutex which is not locked" unless owned? @locked_thread = nil @queue << true self end