Queue¶
class Queue¶
- template <class T>
-
class
paddle::
Queue
¶ A thread-safe queue that automatically grows but never shrinks. Dequeue a empty queue will block current thread. Enqueue an element will wake up another thread that blocked by dequeue method.
For example.
paddle::Queue<int> q; END_OF_JOB=-1 void thread1() { while (true) { auto job = q.dequeue(); if (job == END_OF_JOB) { break; } processJob(job); } } void thread2() { while (true) { auto job = getJob(); q.enqueue(job); if (job == END_OF_JOB) { break; } } }
Public Functions
-
~Queue
()¶
-
void
enqueue
(const T &el)¶ enqueue an element into Queue.
- Note
- This method is thread-safe, and will wake up another blocked thread.
- Parameters
el
-The enqueue element.
-
void
enqueue
(T &&el)¶ enqueue an element into Queue.
- Note
- This method is thread-safe, and will wake up another blocked thread.
- Parameters
el
-The enqueue element. rvalue reference .
-
T
dequeue
()¶ Dequeue from a queue and return a element.
- Note
- this method will be blocked until not empty.
-
int
size
() const¶ Return size of queue.
- Note
- This method is not thread safe. Obviously this number can change by the time you actually look at it.
-
bool
empty
() const¶ is empty or not.
- Return
- true if empty.
- Note
- This method is not thread safe.
-
void
waitEmpty
()¶ wait util queue is empty
-
class BlockingQueue¶
- template <typename T>
-
class
paddle::
BlockingQueue
¶ Public Functions
-
BlockingQueue
(size_t capacity)¶ Construct Function.
- Parameters
capacity
-the max numer of elements the queue can have.
-
T
dequeue
()¶ Dequeue from a queue and return a element.
- Note
- this method will be blocked until not empty.
- Note
- this method will wake up another thread who was blocked because of the queue is full.
-
size_t
size
()¶ Return size of queue.
- Note
- This method is thread safe. The size of the queue won’t change until the method return.
-
size_t
empty
()¶ is empty or not.
- Return
- true if empty.
- Note
- This method is thread safe.
-