---
title: "compareExchange(expected:desired:ordering:)"
framework: synchronization
role: symbol
role_heading: Instance Method
path: "synchronization/atomic/compareexchange(expected:desired:ordering:)-s52j"
---

# compareExchange(expected:desired:ordering:)

Perform an atomic compare and exchange operation on the current value, applying the specified memory ordering.

## Declaration

```swift
func compareExchange(expected: consuming Value, desired: consuming Value, ordering: AtomicUpdateOrdering) -> (exchanged: Bool, original: Value)
```

## Parameters

- `expected`: The expected current value.
- `desired`: The desired new value.
- `ordering`: The memory ordering to apply on this operation.

## Return Value

Return Value A tuple (exchanged, original), where exchanged is true if the exchange was successful, and original is the original value.

## Discussion

Discussion 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) } note: This method implements a “strong” compare and exchange operation that does not permit spurious failures.
