Class: ActiveRecord::ConnectionAdapters::ConnectionPool::BiasableQueue::BiasedConditionVariable
- Inherits:
-
Object
- Object
- ActiveRecord::ConnectionAdapters::ConnectionPool::BiasableQueue::BiasedConditionVariable
- Defined in:
- activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
Overview
:nodoc:
Instance Method Summary collapse
- #broadcast ⇒ Object
- #broadcast_on_biased ⇒ Object
-
#initialize(lock, other_cond, preferred_thread) ⇒ BiasedConditionVariable
constructor
semantics of condition variables guarantee that
broadcast
,broadcast_on_biased
,signal
andwait
methods are only called while holding a lock. - #signal ⇒ Object
- #wait(timeout) ⇒ Object
Constructor Details
#initialize(lock, other_cond, preferred_thread) ⇒ BiasedConditionVariable
semantics of condition variables guarantee that broadcast
, broadcast_on_biased
, signal
and wait
methods are only called while holding a lock
237 238 239 240 241 242 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb', line 237 def initialize(lock, other_cond, preferred_thread) @real_cond = lock.new_cond @other_cond = other_cond @preferred_thread = preferred_thread @num_waiting_on_real_cond = 0 end |
Instance Method Details
#broadcast ⇒ Object
244 245 246 247 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb', line 244 def broadcast broadcast_on_biased @other_cond.broadcast end |
#broadcast_on_biased ⇒ Object
249 250 251 252 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb', line 249 def broadcast_on_biased @num_waiting_on_real_cond = 0 @real_cond.broadcast end |
#signal ⇒ Object
254 255 256 257 258 259 260 261 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb', line 254 def signal if @num_waiting_on_real_cond > 0 @num_waiting_on_real_cond -= 1 @real_cond else @other_cond end.signal end |
#wait(timeout) ⇒ Object
263 264 265 266 267 268 269 270 |
# File 'activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb', line 263 def wait(timeout) if Thread.current == @preferred_thread @num_waiting_on_real_cond += 1 @real_cond else @other_cond end.wait(timeout) end |