#include <taskflow/core/tsq.hpp>
template<typename T>
UnboundedTaskQueue class
class to create a lock-free unbounded single-producer multiple-consumer queue
Template parameters | |
---|---|
T | data type (must be a pointer type) |
This class implements the work-stealing queue described in the paper, Correct and Efficient Work-Stealing for Weak Memory Models.
Only the queue owner can perform pop and push operations, while others can steal data from the queue simultaneously.
Constructors, destructors, conversion operators
-
UnboundedTaskQueue(int64_t LogSize = TF_
DEFAULT_ UNBOUNDED_ TASK_ QUEUE_ LOG_ SIZE) explicit - constructs the queue with the given size in the base-2 logarithm
- ~UnboundedTaskQueue()
- destructs the queue
Public functions
- auto empty() const -> bool noexcept
- queries if the queue is empty at the time of this call
- auto size() const -> size_t noexcept
- queries the number of items at the time of this call
- auto capacity() const -> int64_t noexcept
- queries the capacity of the queue
- void push(T item)
- inserts an item to the queue
- auto pop() -> T
- pops out an item from the queue
- auto steal() -> T
- steals an item from the queue
Function documentation
template<typename T>
tf:: UnboundedTaskQueue<T>:: UnboundedTaskQueue(int64_t LogSize = TF_ DEFAULT_ UNBOUNDED_ TASK_ QUEUE_ LOG_ SIZE) explicit
constructs the queue with the given size in the base-2 logarithm
Parameters | |
---|---|
LogSize | the base-2 logarithm of the queue size |
template<typename T>
void tf:: UnboundedTaskQueue<T>:: push(T item)
inserts an item to the queue
Parameters | |
---|---|
item | the item to push to the queue |
Only the owner thread can insert an item to the queue. The operation can trigger the queue to resize its capacity if more space is required.
template<typename T>
T tf:: UnboundedTaskQueue<T>:: pop()
pops out an item from the queue
Only the owner thread can pop out an item from the queue. The return can be a nullptr
if this operation failed (empty queue).
template<typename T>
T tf:: UnboundedTaskQueue<T>:: steal()
steals an item from the queue
Any threads can try to steal an item from the queue. The return can be a nullptr
if this operation failed (not necessary empty).