< prev index next >
src/hotspot/share/gc/shared/taskqueue.hpp
Print this page
rev 57895 : [mq]: 8215297-remove-ptt
@@ -441,93 +441,10 @@
class TerminatorTerminator: public CHeapObj<mtInternal> {
public:
virtual bool should_exit_termination() = 0;
};
-// A class to aid in the termination of a set of parallel tasks using
-// TaskQueueSet's for work stealing.
-
-#undef TRACESPINNING
-
-class ParallelTaskTerminator: public CHeapObj<mtGC> {
-protected:
- uint _n_threads;
- TaskQueueSetSuper* _queue_set;
-
- DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE, 0);
- volatile uint _offered_termination;
- DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, sizeof(volatile uint));
-
-#ifdef TRACESPINNING
- static uint _total_yields;
- static uint _total_spins;
- static uint _total_peeks;
-#endif
-
- bool peek_in_queue_set();
-protected:
- virtual void yield();
- void sleep(uint millis);
-
- // Called when exiting termination is requested.
- // When the request is made, terminator may have already terminated
- // (e.g. all threads are arrived and offered termination). In this case,
- // it should ignore the request and complete the termination.
- // Return true if termination is completed. Otherwise, return false.
- bool complete_or_exit_termination();
-public:
-
- // "n_threads" is the number of threads to be terminated. "queue_set" is a
- // queue sets of work queues of other threads.
- ParallelTaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set);
- virtual ~ParallelTaskTerminator();
-
- // The current thread has no work, and is ready to terminate if everyone
- // else is. If returns "true", all threads are terminated. If returns
- // "false", available work has been observed in one of the task queues,
- // so the global task is not complete.
- bool offer_termination() {
- return offer_termination(NULL);
- }
-
- // As above, but it also terminates if the should_exit_termination()
- // method of the terminator parameter returns true. If terminator is
- // NULL, then it is ignored.
- virtual bool offer_termination(TerminatorTerminator* terminator);
-
- // Reset the terminator, so that it may be reused again.
- // The caller is responsible for ensuring that this is done
- // in an MT-safe manner, once the previous round of use of
- // the terminator is finished.
- void reset_for_reuse();
- // Same as above but the number of parallel threads is set to the
- // given number.
- void reset_for_reuse(uint n_threads);
-
-#ifdef TRACESPINNING
- static uint total_yields() { return _total_yields; }
- static uint total_spins() { return _total_spins; }
- static uint total_peeks() { return _total_peeks; }
- static void print_termination_counts();
-#endif
-};
-
-class TaskTerminator : public StackObj {
-private:
- ParallelTaskTerminator* _terminator;
-
- NONCOPYABLE(TaskTerminator);
-
-public:
- TaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set);
- ~TaskTerminator();
-
- ParallelTaskTerminator* terminator() const {
- return _terminator;
- }
-};
-
typedef GenericTaskQueue<oop, mtGC> OopTaskQueue;
typedef GenericTaskQueueSet<OopTaskQueue, mtGC> OopTaskQueueSet;
#ifdef _MSC_VER
#pragma warning(push)
< prev index next >