test/hotspot/gtest/utilities/test_lockFreeStack.cpp
changeset 59247 56bf71d64d51
parent 53410 571f12d51db5
equal deleted inserted replaced
59246:fcad92f425c5 59247:56bf71d64d51
    22  */
    22  */
    23 
    23 
    24 #include "precompiled.hpp"
    24 #include "precompiled.hpp"
    25 #include "memory/allocation.inline.hpp"
    25 #include "memory/allocation.inline.hpp"
    26 #include "runtime/atomic.hpp"
    26 #include "runtime/atomic.hpp"
    27 #include "runtime/orderAccess.hpp"
       
    28 #include "utilities/globalDefinitions.hpp"
    27 #include "utilities/globalDefinitions.hpp"
    29 #include "utilities/lockFreeStack.hpp"
    28 #include "utilities/lockFreeStack.hpp"
    30 #include "threadHelper.inline.hpp"
    29 #include "threadHelper.inline.hpp"
    31 #include "unittest.hpp"
    30 #include "unittest.hpp"
    32 #include <new>
    31 #include <new>
   224     _local_processed(0),
   223     _local_processed(0),
   225     _ready(false)
   224     _ready(false)
   226   {}
   225   {}
   227 
   226 
   228   virtual void main_run() {
   227   virtual void main_run() {
   229     OrderAccess::release_store_fence(&_ready, true);
   228     Atomic::release_store_fence(&_ready, true);
   230     while (true) {
   229     while (true) {
   231       Element* e = _from->pop();
   230       Element* e = _from->pop();
   232       if (e != NULL) {
   231       if (e != NULL) {
   233         _to->push(*e);
   232         _to->push(*e);
   234         Atomic::inc(_processed);
   233         Atomic::inc(_processed);
   235         ++_local_processed;
   234         ++_local_processed;
   236       } else if (OrderAccess::load_acquire(_processed) == _process_limit) {
   235       } else if (Atomic::load_acquire(_processed) == _process_limit) {
   237         tty->print_cr("thread %u processed " SIZE_FORMAT, _id, _local_processed);
   236         tty->print_cr("thread %u processed " SIZE_FORMAT, _id, _local_processed);
   238         return;
   237         return;
   239       }
   238       }
   240     }
   239     }
   241   }
   240   }
   242 
   241 
   243   bool ready() const { return OrderAccess::load_acquire(&_ready); }
   242   bool ready() const { return Atomic::load_acquire(&_ready); }
   244 };
   243 };
   245 
   244 
   246 TEST_VM(LockFreeStackTest, stress) {
   245 TEST_VM(LockFreeStackTest, stress) {
   247   Semaphore post;
   246   Semaphore post;
   248   TestStack initial_stack;
   247   TestStack initial_stack;