< prev index next >

src/hotspot/share/gc/shared/taskqueue.hpp

Print this page

        

*** 354,364 **** class TaskQueueSetSuper { protected: static int randomParkAndMiller(int* seed0); public: // Returns "true" if some TaskQueue in the set contains a task. ! virtual bool peek() = 0; }; template <MEMFLAGS F> class TaskQueueSetSuperImpl: public CHeapObj<F>, public TaskQueueSetSuper { }; --- 354,365 ---- class TaskQueueSetSuper { protected: static int randomParkAndMiller(int* seed0); public: // Returns "true" if some TaskQueue in the set contains a task. ! virtual bool peek() = 0; ! virtual size_t tasks() = 0; }; template <MEMFLAGS F> class TaskQueueSetSuperImpl: public CHeapObj<F>, public TaskQueueSetSuper { };
*** 386,395 **** --- 387,397 ---- // succeeds, returns "true" and sets "t" to the stolen task, otherwise returns // false. bool steal(uint queue_num, int* seed, E& t); bool peek(); + size_t tasks(); uint size() const { return _n; } }; template<class T, MEMFLAGS F> void
*** 411,420 **** --- 413,432 ---- return true; } return false; } + template<class T, MEMFLAGS F> + size_t GenericTaskQueueSet<T, F>::tasks() { + size_t 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: virtual bool should_exit_termination() = 0; };
*** 423,433 **** // TaskQueueSet's for work stealing. #undef TRACESPINNING class ParallelTaskTerminator: public StackObj { ! private: uint _n_threads; TaskQueueSetSuper* _queue_set; volatile uint _offered_termination; #ifdef TRACESPINNING --- 435,445 ---- // TaskQueueSet's for work stealing. #undef TRACESPINNING class ParallelTaskTerminator: public StackObj { ! protected: uint _n_threads; TaskQueueSetSuper* _queue_set; volatile uint _offered_termination; #ifdef TRACESPINNING
*** 456,466 **** } // 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. ! 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. --- 468,478 ---- } // 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.
< prev index next >