М
Size: a a a
М
NK
М
NK
М
AM
QH
AM
NK
NK
NK
QH
QH
NK
NK
QH
AtomicReference<Deferred>
NK
AtomicReference<Deferred>
QH
NK
QH
var d: Deferred
if (ref.get().also { d = it } == null && ref.cas(null, Deferred().also { d = it })) {
запускаем задачу, которая присвоит внутрь d
} else {
return d.await()
}