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