Sha256: 7c0c342c49aae9fd7d64746391a2ca21243543d308a944127474a01bb865b284
Contents?: true
Size: 803 Bytes
Versions: 1
Compression:
Stored size: 803 Bytes
Contents
require "thread" require "monitor" 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
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
future-resource-0.0.1 | lib/future-resource.rb |