Class: Qpid::Proton::WorkQueue
- Inherits:
-
Object
- Object
- Qpid::Proton::WorkQueue
- Defined in:
- lib/core/work_queue.rb
Overview
A thread-safe queue of work for multi-threaded programs.
A Container can have multiple threads calling Container#run The container ensures that work associated with a single Connection or Listener is serialized - two threads will never concurrently call handlers associated with the same object.
To have your own code serialized in the same, add a block to the connection’s WorkQueue. The block will be invoked as soon as it is safe to do so.
A Connection and the objects associated with it (Session, Sender, Receiver, Delivery, Tracker) are not thread safe, so if you have multiple threads calling Container#run or if you want to affect objects managed by the container from non-container threads you need to use the WorkQueue
Defined Under Namespace
Classes: StoppedError
Instance Method Summary collapse
-
#add {|| ... }
Add a block of code to be invoked in sequence.
-
#schedule(at) {|| ... }
Schedule a block to be invoked at a certain time.
Instance Method Details
#add {|| ... }
Thread Safe: may be called in any thread.
This method returns an undefined value.
Add a block of code to be invoked in sequence.
49 50 51 |
# File 'lib/core/work_queue.rb', line 49 def add(&block) schedule(0, &block) end |
#schedule(at) {|| ... }
Thread Safe: may be called in any thread.
This method returns an undefined value.
Schedule a block to be invoked at a certain time.
61 62 63 64 65 66 67 68 |
# File 'lib/core/work_queue.rb', line 61 def schedule(at, &block) raise ArgumentError, "no block" unless block_given? @lock.synchronize do raise @closed if @closed @schedule.insert(at, block) end @container.send :wake end |