Sha256: c08be1a7cc229e8d7f279643db2fd4fea395cf9354415d1d56e5e69404036fd5

Contents?: true

Size: 885 Bytes

Versions: 1

Compression:

Stored size: 885 Bytes

Contents

#--
#            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#                    Version 2, December 2004
#
#            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
#   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
#  0. You just DO WHAT THE FUCK YOU WANT TO.
#++

require 'thread'

class Thread::Promise
	def delivered?
		instance_variable_defined? :@value
	end

	def deliver (value)
		return if delivered?

		@value = value

		if cond?
			mutex.synchronize {
				cond.broadcast
			}
		end

		self
	end

	alias << deliver

	def value
		return @value if delivered?

		mutex.synchronize {
			cond.wait(mutex)
		}

		return @value
	end

	alias ~ value

private
	def cond?
		instance_variable_defined? :@cond
	end

	def cond
		@cond ||= ConditionVariable.new
	end

	def mutex
		@mutex ||= Mutex.new
	end
end

module Kernel
	def promise
		Thread::Promise.new
	end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
thread-0.0.2 lib/thread/promise.rb