< prev index next >
test/hotspot/gtest/utilities/test_lockFreeStack.cpp
Print this page
*** 22,32 ****
*/
#include "precompiled.hpp"
#include "memory/allocation.inline.hpp"
#include "runtime/atomic.hpp"
- #include "runtime/orderAccess.hpp"
#include "utilities/globalDefinitions.hpp"
#include "utilities/lockFreeStack.hpp"
#include "threadHelper.inline.hpp"
#include "unittest.hpp"
#include <new>
--- 22,31 ----
*** 224,248 ****
_local_processed(0),
_ready(false)
{}
virtual void main_run() {
! OrderAccess::release_store_fence(&_ready, true);
while (true) {
Element* e = _from->pop();
if (e != NULL) {
_to->push(*e);
Atomic::inc(_processed);
++_local_processed;
! } else if (OrderAccess::load_acquire(_processed) == _process_limit) {
tty->print_cr("thread %u processed " SIZE_FORMAT, _id, _local_processed);
return;
}
}
}
! bool ready() const { return OrderAccess::load_acquire(&_ready); }
};
TEST_VM(LockFreeStackTest, stress) {
Semaphore post;
TestStack initial_stack;
--- 223,247 ----
_local_processed(0),
_ready(false)
{}
virtual void main_run() {
! Atomic::release_store_fence(&_ready, true);
while (true) {
Element* e = _from->pop();
if (e != NULL) {
_to->push(*e);
Atomic::inc(_processed);
++_local_processed;
! } else if (Atomic::load_acquire(_processed) == _process_limit) {
tty->print_cr("thread %u processed " SIZE_FORMAT, _id, _local_processed);
return;
}
}
}
! bool ready() const { return Atomic::load_acquire(&_ready); }
};
TEST_VM(LockFreeStackTest, stress) {
Semaphore post;
TestStack initial_stack;
< prev index next >