< prev index next >

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

Print this page

        

*** 200,209 **** --- 200,230 ---- protected: virtual AbstractGangWorker* allocate_worker(uint which); }; + // Temporarily try to set the number of active workers. + // It's not guaranteed that it succeeds, and users need to + // query the number of active workers. + class WithUpdatedActiveWorkers : public StackObj { + private: + AbstractWorkGang* const _gang; + const uint _old_active_workers; + + public: + WithUpdatedActiveWorkers(AbstractWorkGang* gang, uint requested_num_workers) : + _gang(gang), + _old_active_workers(gang->active_workers()) { + uint capped_num_workers = MIN2(requested_num_workers, gang->total_workers()); + gang->update_active_workers(capped_num_workers); + } + + ~WithUpdatedActiveWorkers() { + _gang->update_active_workers(_old_active_workers); + } + }; + // Several instances of this class run in parallel as workers for a gang. class AbstractGangWorker: public WorkerThread { public: AbstractGangWorker(AbstractWorkGang* gang, uint id);
< prev index next >