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.
-