PFUNC
1.0
|
#include <pfunc/fifo.hpp>
Public Types | |
typedef std::queue< ValueType * > | queue_type |
typedef queue_type::value_type | value_type |
typedef unsigned int | queue_index_type |
typedef task_queue_set_data < queue_type > | data_type |
Public Member Functions | |
task_queue_set (unsigned int num_queues) PFUNC_CONSTRUCTOR_TRY_BLOCK() | |
~task_queue_set () | |
template<typename TaskPredicatePair > | |
bool | test_and_get (queue_index_type queue_num, const TaskPredicatePair &cnd, value_type &value, bool own_queue) |
template<typename TaskPredicatePair > | |
value_type | get (queue_index_type queue_num, const TaskPredicatePair &cnd) |
void | put (queue_index_type queue_num, const value_type &value) |
Public Attributes | |
ALIGN128 data_type * | data |
ALIGN128 unsigned int | num_queues |
Specialization of task_queue_set for FIFO queues.
typedef task_queue_set_data<queue_type> pfunc::detail::task_queue_set< fifoS, ValueType >::data_type |
task_queue_set data
typedef unsigned int pfunc::detail::task_queue_set< fifoS, ValueType >::queue_index_type |
type to index into the list
typedef std::queue<ValueType*> pfunc::detail::task_queue_set< fifoS, ValueType >::queue_type |
queue type
typedef queue_type::value_type pfunc::detail::task_queue_set< fifoS, ValueType >::value_type |
value type
pfunc::detail::task_queue_set< fifoS, ValueType >::task_queue_set | ( | unsigned int | num_queues | ) | [inline] |
Constructor
[in] | num_queues | Number of task queues to create. |
pfunc::detail::task_queue_set< fifoS, ValueType >::~task_queue_set | ( | ) | [inline] |
Destructor
value_type pfunc::detail::task_queue_set< fifoS, ValueType >::get | ( | queue_index_type | queue_num, |
const TaskPredicatePair & | cnd | ||
) | [inline] |
Get a suitable task from the queue. First, we check if a task can be retrieved from the task queue passed to us. If not, we check every other task queue for a task (this constitues a steal).
[in] | queue_num | The first queue to check on. |
[in] | cnd | The predicate to be satisfied. |
void pfunc::detail::task_queue_set< fifoS, ValueType >::put | ( | queue_index_type | queue_num, |
const value_type & | value | ||
) | [inline] |
Store the value at the front of the given queue
[in] | queue_num | The task queue to use. |
[in] | value | The value (task ptr) to be stored. |
bool pfunc::detail::task_queue_set< fifoS, ValueType >::test_and_get | ( | queue_index_type | queue_num, |
const TaskPredicatePair & | cnd, | ||
value_type & | value, | ||
bool | own_queue | ||
) | [inline] |
Check if there is something at the front of the given task queue that meets our predicate. If so, get it. Remember that the predicate is always true for FIFO. Its there simply so that we have the same interface with other scheduling policies that require a predicate.
[in] | queue_num | The task queue to check for tasks. |
[in] | cnd | The predicate to be satisfied. |
[out] | value | If a suitable task is found, its put here. |
[in] | own_queue | Is true if removing element from own_queue. |
ALIGN128 data_type* pfunc::detail::task_queue_set< fifoS, ValueType >::data |
Holds all the data required
ALIGN128 unsigned int pfunc::detail::task_queue_set< fifoS, ValueType >::num_queues |
Number of queues