test/hotspot/gtest/utilities/test_globalCounter_nested.cpp
changeset 59247 56bf71d64d51
parent 52332 d2a3503c72f7
equal deleted inserted replaced
59246:fcad92f425c5 59247:56bf71d64d51
    22  */
    22  */
    23 
    23 
    24 #include "precompiled.hpp"
    24 #include "precompiled.hpp"
    25 #include "metaprogramming/isRegisteredEnum.hpp"
    25 #include "metaprogramming/isRegisteredEnum.hpp"
    26 #include "runtime/atomic.hpp"
    26 #include "runtime/atomic.hpp"
    27 #include "runtime/orderAccess.hpp"
       
    28 #include "runtime/os.hpp"
    27 #include "runtime/os.hpp"
    29 #include "utilities/globalCounter.hpp"
    28 #include "utilities/globalCounter.hpp"
    30 #include "utilities/globalCounter.inline.hpp"
    29 #include "utilities/globalCounter.inline.hpp"
    31 #include "utilities/spinYield.hpp"
    30 #include "utilities/spinYield.hpp"
    32 #include "threadHelper.inline.hpp"
    31 #include "threadHelper.inline.hpp"
    55   {}
    54   {}
    56 
    55 
    57   ~RCUNestedThread() {}
    56   ~RCUNestedThread() {}
    58 
    57 
    59   void set_state(NestedTestState new_state) {
    58   void set_state(NestedTestState new_state) {
    60     OrderAccess::release_store(&_state, new_state);
    59     Atomic::release_store(&_state, new_state);
    61   }
    60   }
    62 
    61 
    63   void wait_with_state(NestedTestState new_state) {
    62   void wait_with_state(NestedTestState new_state) {
    64     SpinYield spinner;
    63     SpinYield spinner;
    65     OrderAccess::release_store(&_state, new_state);
    64     Atomic::release_store(&_state, new_state);
    66     while (!OrderAccess::load_acquire(&_proceed)) {
    65     while (!Atomic::load_acquire(&_proceed)) {
    67       spinner.wait();
    66       spinner.wait();
    68     }
    67     }
    69     OrderAccess::release_store(&_proceed, false);
    68     Atomic::release_store(&_proceed, false);
    70   }
    69   }
    71 
    70 
    72 public:
    71 public:
    73   NestedTestState state() const {
    72   NestedTestState state() const {
    74     return OrderAccess::load_acquire(&_state);
    73     return Atomic::load_acquire(&_state);
    75   }
    74   }
    76 
    75 
    77   void wait_for_state(NestedTestState goal) {
    76   void wait_for_state(NestedTestState goal) {
    78     SpinYield spinner;
    77     SpinYield spinner;
    79     while (state() != goal) {
    78     while (state() != goal) {
    80       spinner.wait();
    79       spinner.wait();
    81     }
    80     }
    82   }
    81   }
    83 
    82 
    84   void proceed() {
    83   void proceed() {
    85     OrderAccess::release_store(&_proceed, true);
    84     Atomic::release_store(&_proceed, true);
    86   }
    85   }
    87 };
    86 };
    88 
    87 
    89 class RCUNestedReaderThread : public RCUNestedThread {
    88 class RCUNestedReaderThread : public RCUNestedThread {
    90 public:
    89 public: