weakCompareExchange(expected:desired:successOrdering:failureOrdering:)
Perform an atomic weak compare and exchange operation on the current value, applying the specified success/failure memory orderings. This compare-exchange variant is allowed to spuriously fail; it is designed to be called in a loop until it indicates a successful exchange has happened.
- iOS
- 18.0+
- macOS
- 15.0+
- tvOS
- 18.0+
- visionOS
- 2.0+
- watchOS
- 11.0+
func weakCompareExchange(expected: consuming Value, desired: consuming Value, successOrdering: AtomicUpdateOrdering, failureOrdering: AtomicLoadOrdering) -> (exchanged: Bool, original: Value)
Parameters
- expected
The expected current value.
- desired
The desired new value.
- successOrdering
The memory ordering to apply if this operation performs the exchange.
- failureOrdering
The memory ordering to apply on this operation does not perform the exchange.
Returns
A tuple (exchanged, original)
, where exchanged
is true if the exchange was successful, and original
is the original value.
This operation performs the following algorithm as a single atomic transaction:
atomic(self) { currentValue in
let original = currentValue
guard original == expected else { return (false, original) }
currentValue = desired
return (true, original)
}
The ordering
argument specifies the memory ordering to use when the operation manages to update the current value, while failureOrdering
will be used when the operation leaves the value intact.