Sha256: b1f791144d9a7af013d2121ea859a6c3fdedcc83cd3337feba6cc702468734d5
Contents?: true
Size: 785 Bytes
Versions: 18
Compression:
Stored size: 785 Bytes
Contents
require "thread" class FutureResource def initialize @resource_lock = Monitor.new @resource_value_blocker = @resource_lock.new_cond end def set_yet? @resource_lock.synchronize { defined? @resource } end def resource @resource_lock.synchronize do @resource_value_blocker.wait unless defined? @resource @resource end end def resource=(resource) @resource_lock.synchronize do raise ResourceAlreadySetException if defined? @resource @resource = resource @resource_value_blocker.broadcast @resource_value_blocker = nil # Don't really need it anymore. end end class ResourceAlreadySetException < StandardError def initialize super "Cannot set this resource twice!" end end end
Version data entries
18 entries across 18 versions & 3 rubygems