Add documentation on migrating away from compare_and_swap
This commit is contained in:
parent
3abba5e21f
commit
4252e48256
@ -464,6 +464,23 @@ impl AtomicBool {
|
|||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on `u8`.
|
/// operations on `u8`.
|
||||||
///
|
///
|
||||||
|
/// # Migrating to `compare_exchange` and `compare_exchange_weak`
|
||||||
|
///
|
||||||
|
/// `compare_and_swap` is equivalent to `compare_exchange` with the following mapping for
|
||||||
|
/// memory orderings:
|
||||||
|
///
|
||||||
|
/// Original | Success | Failure
|
||||||
|
/// -------- | ------- | -------
|
||||||
|
/// Relaxed | Relaxed | Relaxed
|
||||||
|
/// Acquire | Acquire | Acquire
|
||||||
|
/// Release | Release | Relaxed
|
||||||
|
/// AcqRel | AcqRel | Acquire
|
||||||
|
/// SeqCst | SeqCst | SeqCst
|
||||||
|
///
|
||||||
|
/// `compare_exchange_weak` is allowed to fail spuriously even when the comparison succeeds,
|
||||||
|
/// which allows the compiler to generate better assembly code when the compare and swap
|
||||||
|
/// is used in a loop.
|
||||||
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
@ -1070,6 +1087,23 @@ impl<T> AtomicPtr<T> {
|
|||||||
/// **Note:** This method is only available on platforms that support atomic
|
/// **Note:** This method is only available on platforms that support atomic
|
||||||
/// operations on pointers.
|
/// operations on pointers.
|
||||||
///
|
///
|
||||||
|
/// # Migrating to `compare_exchange` and `compare_exchange_weak`
|
||||||
|
///
|
||||||
|
/// `compare_and_swap` is equivalent to `compare_exchange` with the following mapping for
|
||||||
|
/// memory orderings:
|
||||||
|
///
|
||||||
|
/// Original | Success | Failure
|
||||||
|
/// -------- | ------- | -------
|
||||||
|
/// Relaxed | Relaxed | Relaxed
|
||||||
|
/// Acquire | Acquire | Acquire
|
||||||
|
/// Release | Release | Relaxed
|
||||||
|
/// AcqRel | AcqRel | Acquire
|
||||||
|
/// SeqCst | SeqCst | SeqCst
|
||||||
|
///
|
||||||
|
/// `compare_exchange_weak` is allowed to fail spuriously even when the comparison succeeds,
|
||||||
|
/// which allows the compiler to generate better assembly code when the compare and swap
|
||||||
|
/// is used in a loop.
|
||||||
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
@ -1612,6 +1646,23 @@ happens, and using [`Release`] makes the load part [`Relaxed`].
|
|||||||
**Note**: This method is only available on platforms that support atomic
|
**Note**: This method is only available on platforms that support atomic
|
||||||
operations on [`", $s_int_type, "`](", $int_ref, ").
|
operations on [`", $s_int_type, "`](", $int_ref, ").
|
||||||
|
|
||||||
|
# Migrating to `compare_exchange` and `compare_exchange_weak`
|
||||||
|
|
||||||
|
`compare_and_swap` is equivalent to `compare_exchange` with the following mapping for
|
||||||
|
memory orderings:
|
||||||
|
|
||||||
|
Original | Success | Failure
|
||||||
|
-------- | ------- | -------
|
||||||
|
Relaxed | Relaxed | Relaxed
|
||||||
|
Acquire | Acquire | Acquire
|
||||||
|
Release | Release | Relaxed
|
||||||
|
AcqRel | AcqRel | Acquire
|
||||||
|
SeqCst | SeqCst | SeqCst
|
||||||
|
|
||||||
|
`compare_exchange_weak` is allowed to fail spuriously even when the comparison succeeds,
|
||||||
|
which allows the compiler to generate better assembly code when the compare and swap
|
||||||
|
is used in a loop.
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user