From 7194ffc62da90fc379085d951b9a6151b6f38ddf Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Wed, 4 Aug 2021 02:11:17 -0400 Subject: [PATCH] Reduce unnecessary load --- src/msqueue.jl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/msqueue.jl b/src/msqueue.jl index 086bc8e..5995af3 100644 --- a/src/msqueue.jl +++ b/src/msqueue.jl @@ -23,8 +23,8 @@ function Base.push!(queue::ConcurrentQueue{T}, v) where {T} v = convert(T, v) node = MSQNode{T}(nothing, v) + tail = @atomic queue.tail while true - tail = @atomic queue.tail next = @atomic tail.next if next === nothing next, ok = @atomicreplace(tail.next, next => node) @@ -32,8 +32,12 @@ function Base.push!(queue::ConcurrentQueue{T}, v) where {T} @atomicreplace(queue.tail, tail => node) return queue end + tail = @atomic queue.tail else - tail, _ = @atomicreplace(queue.tail, tail => next) + tail, ok = @atomicreplace(queue.tail, tail => next) + if ok + tail = next + end end end end