Class: Mutant::Variable Private
- Inherits:
-
Object
- Object
- Mutant::Variable
- Defined in:
- lib/mutant/variable.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Lightweight concurrency variables
These are inspired by Haskells MVar and IVar types.
Defined Under Namespace
Modules: Timer Classes: IVar, MVar, Result
Constant Summary collapse
- EMPTY =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Class.new do const_set(:INSPECT, 'Variable::EMPTY') end.new.freeze
- TIMEOUT =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
Class.new do const_set(:INSPECT, 'Variable::TIMEOUT') end.new.freeze
Instance Method Summary collapse
-
#initialize(condition_variable:, mutex:, value: EMPTY) ⇒ undefined
constructor
private
Initialize object.
-
#read ⇒ Object
private
Read value, block on empty.
-
#take ⇒ Object
private
Take value, block on empty.
-
#take_timeout(timeout) ⇒ Result::Timeout, Result::Value
private
Take value, with timeout.
-
#try_put(value) ⇒ self
private
Try put value into the variable, non blocking.
-
#with {|Object| ... } ⇒ Object
private
Execute block with value, blocking.
Constructor Details
#initialize(condition_variable:, mutex:, value: EMPTY) ⇒ undefined
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initialize object
83 84 85 86 87 |
# File 'lib/mutant/variable.rb', line 83 def initialize(condition_variable:, mutex:, value: EMPTY) @full = condition_variable.new @mutex = mutex.new @value = value end |
Instance Method Details
#read ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Read value, block on empty
122 123 124 125 126 127 |
# File 'lib/mutant/variable.rb', line 122 def read synchronize do wait_full @value end end |
#take ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Take value, block on empty
92 93 94 95 96 97 |
# File 'lib/mutant/variable.rb', line 92 def take synchronize do wait_full perform_take end end |
#take_timeout(timeout) ⇒ Result::Timeout, Result::Value
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Take value, with timeout
108 109 110 111 112 113 114 115 116 |
# File 'lib/mutant/variable.rb', line 108 def take_timeout(timeout) synchronize do if wait_timeout(@full, timeout, &method(:full?)) Result::Timeout.new else Result::Value.new(perform_take) end end end |
#try_put(value) ⇒ self
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Try put value into the variable, non blocking
134 135 136 137 138 139 140 |
# File 'lib/mutant/variable.rb', line 134 def try_put(value) synchronize do perform_put(value) if empty? end self end |
#with {|Object| ... } ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Execute block with value, blocking
148 149 150 151 152 153 |
# File 'lib/mutant/variable.rb', line 148 def with synchronize do wait_full yield @value end end |