Exception: UnblockError
- Inherits:
-
StandardError
- Object
- StandardError
- UnblockError
- Defined in:
- lib/buzzcore/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