Exception: UnblockError
- Inherits:
-
StandardError
- Object
- StandardError
- UnblockError
- 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