RFR: 8263551: Provide shared lock-free FIFO queue implementation
Man Cao
manc at openjdk.java.net
Mon Mar 15 20:06:09 UTC 2021
On Sat, 13 Mar 2021 10:41:44 GMT, Man Cao <manc at openjdk.org> wrote:
> Hi all,
>
> Could anyone review this change that is mainly code motion? It creates a generalized lock-free queue implementation based on G1DirtyCardQueueSet::Queue, which will be used by JDK-8236485 in the future.
>
> The shared LockFreeQueue is similar to the existing LockFreeStack. The notable difference is that the LockFreeQueue has an additional template parameter for whether to use GlobalCounter::CriticalSection to avoid ABA problem.
>
> -Man
src/hotspot/share/utilities/lockFreeQueue.inline.hpp line 60:
> 58: LockFreeQueueCriticalSection<rcu_pop> cs(current_thread);
> 59:
> 60: T* result = Atomic::load_acquire(&_head);
A related question about memory ordering. Are these two load_acquire() really necessary? They are not paired with any release_store().
I think they can be normal Atomic::load(), as append() and pop() already have Atomic::xchg() and Atomic::cmpxchg() to enforce ordering.
-------------
PR: https://git.openjdk.java.net/jdk/pull/2986
More information about the hotspot-dev
mailing list