< prev index next >

src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp

Print this page
rev 57716 : [mq]: remove_cbl_mon

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.

@@ -43,28 +43,29 @@
   Tickspan _total_refinement_time;
   size_t _total_refined_cards;
 
   uint _worker_id;
 
-  bool _active;
-  Monitor* _monitor;
+  // Each thread has its own semaphore.  The i-th thread is responsible for
+  // signaling thread i+1 if the number of buffers in the queue exceeds a
+  // threshold for that thread.  Semaphores are also used to wake up the
+  // threads during termination.  The 0th (primary) worker is notified by
+  // mutator threads.
+  Semaphore* _notifier;
+  volatile bool _should_notify;
+  bool maybe_deactivate(bool more_work);
+
   G1ConcurrentRefine* _cr;
 
   void wait_for_completed_buffers();
 
-  void set_active(bool x) { _active = x; }
-  // Deactivate this thread.
-  void deactivate();
-
-  bool is_primary() { return (_worker_id == 0); }
+  virtual void run_service();
+  virtual void stop_service();
 
-  void run_service();
-  void stop_service();
 public:
   G1ConcurrentRefineThread(G1ConcurrentRefine* cg1r, uint worker_id);
 
-  bool is_active();
   // Activate this thread.
   void activate();
 
   Tickspan total_refinement_time() const { return _total_refinement_time; }
   size_t total_refined_cards() const { return _total_refined_cards; }
< prev index next >