equal
deleted
inserted
replaced
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; |