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
82 83 84 85 86 |
# File 'lib/mutant/variable.rb', line 82 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
121 122 123 124 125 126 |
# File 'lib/mutant/variable.rb', line 121 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
91 92 93 94 95 96 |
# File 'lib/mutant/variable.rb', line 91 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
107 108 109 110 111 112 113 114 115 |
# File 'lib/mutant/variable.rb', line 107 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
133 134 135 136 137 138 139 |
# File 'lib/mutant/variable.rb', line 133 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
147 148 149 150 151 152 |
# File 'lib/mutant/variable.rb', line 147 def with synchronize do wait_full yield @value end end |