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.