Sha256: 8ad7990c074e97ee4339f4f7d0aabbc4781d19fe88cb295315d5b9cbd409c1bc
Contents?: true
Size: 879 Bytes
Versions: 8
Compression:
Stored size: 879 Bytes
Contents
module Mutant module Actor # Receiver side of an actor class Receiver include Adamantium::Flat, Concord.new(:condition_variable, :mutex, :messages) # Receives a message, blocking # # @return [Object] def call 2.times do message = try_blocking_receive return message unless message.equal?(Undefined) end fail ProtocolError end private # Try a blocking receive # # @return [Undefined] # if there is no message yet # # @return [Object] # if there is a message def try_blocking_receive mutex.synchronize do if messages.empty? condition_variable.wait(mutex) Undefined else messages.shift end end end end # Receiver end # Actor end # Mutant
Version data entries
8 entries across 8 versions & 1 rubygems