< prev index next >

test/hotspot/gtest/utilities/test_globalCounter.cpp

Print this page

        

*** 21,31 **** * questions. */ #include "precompiled.hpp" #include "runtime/atomic.hpp" - #include "runtime/orderAccess.hpp" #include "runtime/os.hpp" #include "utilities/globalCounter.hpp" #include "utilities/globalCounter.inline.hpp" #include "threadHelper.inline.hpp" --- 21,30 ----
*** 46,63 **** virtual ~RCUReaderThread(){} void main_run() { _wrt_start->signal(); while (!_exit) { GlobalCounter::CSContext cs_context = GlobalCounter::critical_section_begin(this); ! volatile TestData* test = OrderAccess::load_acquire(_test); ! long value = OrderAccess::load_acquire(&test->test_value); ASSERT_EQ(value, GOOD_VALUE); GlobalCounter::critical_section_end(this, cs_context); { GlobalCounter::CriticalSection cs(this); ! volatile TestData* test = OrderAccess::load_acquire(_test); ! long value = OrderAccess::load_acquire(&test->test_value); ASSERT_EQ(value, GOOD_VALUE); } } } }; --- 45,62 ---- virtual ~RCUReaderThread(){} void main_run() { _wrt_start->signal(); while (!_exit) { GlobalCounter::CSContext cs_context = GlobalCounter::critical_section_begin(this); ! volatile TestData* test = Atomic::load_acquire(_test); ! long value = Atomic::load_acquire(&test->test_value); ASSERT_EQ(value, GOOD_VALUE); GlobalCounter::critical_section_end(this, cs_context); { GlobalCounter::CriticalSection cs(this); ! volatile TestData* test = Atomic::load_acquire(_test); ! long value = Atomic::load_acquire(&test->test_value); ASSERT_EQ(value, GOOD_VALUE); } } } };
*** 80,90 **** RCUReaderThread* reader3 = new RCUReaderThread(&post, &test, &wrt_start); RCUReaderThread* reader4 = new RCUReaderThread(&post, &test, &wrt_start); TestData* tmp = new TestData(); tmp->test_value = GOOD_VALUE; ! OrderAccess::release_store_fence(&test, tmp); reader1->doit(); reader2->doit(); reader3->doit(); reader4->doit(); --- 79,89 ---- RCUReaderThread* reader3 = new RCUReaderThread(&post, &test, &wrt_start); RCUReaderThread* reader4 = new RCUReaderThread(&post, &test, &wrt_start); TestData* tmp = new TestData(); tmp->test_value = GOOD_VALUE; ! Atomic::release_store_fence(&test, tmp); reader1->doit(); reader2->doit(); reader3->doit(); reader4->doit();
*** 97,107 **** jlong stop_ms = os::javaTimeMillis() + 1000; // 1 seconds max test time for (int i = 0; i < 100000 && stop_ms > os::javaTimeMillis(); i++) { volatile TestData* free_tmp = test; tmp = new TestData(); tmp->test_value = GOOD_VALUE; ! OrderAccess::release_store(&test, tmp); GlobalCounter::write_synchronize(); free_tmp->test_value = BAD_VALUE; delete free_tmp; } RCUReaderThread::_exit = true; --- 96,106 ---- jlong stop_ms = os::javaTimeMillis() + 1000; // 1 seconds max test time for (int i = 0; i < 100000 && stop_ms > os::javaTimeMillis(); i++) { volatile TestData* free_tmp = test; tmp = new TestData(); tmp->test_value = GOOD_VALUE; ! Atomic::release_store(&test, tmp); GlobalCounter::write_synchronize(); free_tmp->test_value = BAD_VALUE; delete free_tmp; } RCUReaderThread::_exit = true;
< prev index next >