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