Exception: UnblockError

Inherits:
StandardError
  • Object
show all
Defined in:
lib/buzzcore/extra/thread_utils.rb

Overview

class MultiThreadVariableMonitor

include MonitorMixin

class UnblockError < StandardError; end class TimeoutError < StandardError; end class LockFailedError < StandardError; end

def initialize(aTimeout=nil) mon_initialize() @value = nil @unblock = false @timeout = aTimeout @readable = new_cond @writable = new_cond @is_first_write = true end

def value raise UnblockError.new if @unblock mon_synchronize do raise TimeoutError.new if not @readable.wait(@timeout) result = @value @writable.signal end return result end

def value=(v) raise UnblockError.new if @unblock mon_synchronize do if @is_first_write @is_first_write = false else raise TimeoutError.new if not @writable.wait(@timeout) end @value = v @readable.signal end return v end

def unblock() @unblock = true; @readable.broadcast @writable.broadcast while @readable.count_waiters()>0 or @writable.count_waiters()>0 do sleep(1) end end end