490 void reset_for_reuse();
491 // Same as above but the number of parallel threads is set to the
492 // given number.
493 void reset_for_reuse(uint n_threads);
494
495 #ifdef TRACESPINNING
496 static uint total_yields() { return _total_yields; }
497 static uint total_spins() { return _total_spins; }
498 static uint total_peeks() { return _total_peeks; }
499 static void print_termination_counts();
500 #endif
501 };
502
503 #ifdef _MSC_VER
504 #pragma warning(push)
505 // warning C4521: multiple copy constructors specified
506 #pragma warning(disable:4521)
507 // warning C4522: multiple assignment operators specified
508 #pragma warning(disable:4522)
509 #endif
510 class TaskTerminator : public StackObj {
511 private:
512 ParallelTaskTerminator* _terminator;
513
514 // Disable following copy constructors and assignment operator
515 TaskTerminator(TaskTerminator& o) { }
516 TaskTerminator(const TaskTerminator& o) { }
517 TaskTerminator& operator=(TaskTerminator& o) { return *this; }
518 public:
519 TaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set);
520 ~TaskTerminator();
521
522 // Move assignment
523 TaskTerminator& operator=(const TaskTerminator& o);
524
525 ParallelTaskTerminator* terminator() const {
526 return _terminator;
527 }
528 };
529 #ifdef _MSC_VER
|
490 void reset_for_reuse();
491 // Same as above but the number of parallel threads is set to the
492 // given number.
493 void reset_for_reuse(uint n_threads);
494
495 #ifdef TRACESPINNING
496 static uint total_yields() { return _total_yields; }
497 static uint total_spins() { return _total_spins; }
498 static uint total_peeks() { return _total_peeks; }
499 static void print_termination_counts();
500 #endif
501 };
502
503 #ifdef _MSC_VER
504 #pragma warning(push)
505 // warning C4521: multiple copy constructors specified
506 #pragma warning(disable:4521)
507 // warning C4522: multiple assignment operators specified
508 #pragma warning(disable:4522)
509 #endif
510
511 class TaskTerminator : public StackObj {
512 private:
513 ParallelTaskTerminator* _terminator;
514
515 // Disable following copy constructors and assignment operator
516 TaskTerminator(TaskTerminator& o) { }
517 TaskTerminator(const TaskTerminator& o) { }
518 TaskTerminator& operator=(TaskTerminator& o) { return *this; }
519 public:
520 TaskTerminator(uint n_threads, TaskQueueSetSuper* queue_set);
521 ~TaskTerminator();
522
523 // Move assignment
524 TaskTerminator& operator=(const TaskTerminator& o);
525
526 ParallelTaskTerminator* terminator() const {
527 return _terminator;
528 }
529 };
530 #ifdef _MSC_VER
|