8212074: Add method to peek the remaining tasks in task queues

Add methods for implementing new task termination protocol

Reviewed-by: tschatzl, shade, rkennke
This commit is contained in:
Zhengyu Gu 2018-10-15 11:53:15 -04:00
parent 4fe2edae59
commit a0ce3d3f18

View File

@ -370,6 +370,8 @@ class TaskQueueSetSuper {
public:
// Returns "true" if some TaskQueue in the set contains a task.
virtual bool peek() = 0;
// Tasks in queue
virtual uint tasks() const = 0;
};
template <MEMFLAGS F> class TaskQueueSetSuperImpl: public CHeapObj<F>, public TaskQueueSetSuper {
@ -399,6 +401,7 @@ public:
bool steal(uint queue_num, E& t);
bool peek();
uint tasks() const;
uint size() const { return _n; }
};
@ -424,6 +427,15 @@ bool GenericTaskQueueSet<T, F>::peek() {
return false;
}
template<class T, MEMFLAGS F>
uint GenericTaskQueueSet<T, F>::tasks() const {
uint n = 0;
for (uint j = 0; j < _n; j++) {
n += _queues[j]->size();
}
return n;
}
// When to terminate from the termination protocol.
class TerminatorTerminator: public CHeapObj<mtInternal> {
public: