@@ -1809,11 +1809,10 @@ Note: This may call the function multiple times if the value has been changed fr
1809
1809
the meantime, as long as the function returns `Some(_)`, but the function will have been applied
1810
1810
but once to the stored value.
1811
1811
1812
- `fetch_update` takes two [`Ordering`] arguments to describe the memory
1813
- ordering of this operation. The first describes the required ordering for loads
1814
- and failed updates while the second describes the required ordering when the
1815
- operation finally succeeds. Beware that this is different from the two
1816
- modes in [`compare_exchange`]!
1812
+ `fetch_update` takes two [`Ordering`] arguments to describe the memory ordering of this operation.
1813
+ The first describes the required ordering for when the operation finally succeeds while the second
1814
+ describes the required ordering for loads. These correspond to the success and failure orderings of
1815
+ [`compare_exchange`] respectively.
1817
1816
1818
1817
Using [`Acquire`] as success ordering makes the store part
1819
1818
of this operation [`Relaxed`], and using [`Release`] makes the final successful load
@@ -1831,24 +1830,21 @@ and must be equivalent to or weaker than the success ordering.
1831
1830
# Examples
1832
1831
1833
1832
```rust
1834
- #![feature(no_more_cas)]
1835
1833
" , $extra_feature, "use std::sync::atomic::{" , stringify!( $atomic_type) , ", Ordering};
1836
1834
1837
1835
let x = " , stringify!( $atomic_type) , "::new(7);
1838
- assert_eq!(x.fetch_update(|_| None, Ordering::SeqCst, Ordering::SeqCst), Err(7));
1839
- assert_eq!(x.fetch_update(|x| Some(x + 1), Ordering::SeqCst, Ordering::SeqCst ), Ok(7));
1840
- assert_eq!(x.fetch_update(|x| Some(x + 1), Ordering::SeqCst, Ordering::SeqCst ), Ok(8));
1836
+ assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |_| None ), Err(7));
1837
+ assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| Some(x + 1)), Ok(7));
1838
+ assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| Some(x + 1)), Ok(8));
1841
1839
assert_eq!(x.load(Ordering::SeqCst), 9);
1842
1840
```" ) ,
1843
1841
#[ inline]
1844
- #[ unstable( feature = "no_more_cas" ,
1845
- reason = "no more CAS loops in user code" ,
1846
- issue = "48655" ) ]
1842
+ #[ stable( feature = "no_more_cas" , since = "1.45.0" ) ]
1847
1843
#[ $cfg_cas]
1848
1844
pub fn fetch_update<F >( & self ,
1849
- mut f : F ,
1845
+ set_order : Ordering ,
1850
1846
fetch_order: Ordering ,
1851
- set_order : Ordering ) -> Result <$int_type, $int_type>
1847
+ mut f : F ) -> Result <$int_type, $int_type>
1852
1848
where F : FnMut ( $int_type) -> Option <$int_type> {
1853
1849
let mut prev = self . load( fetch_order) ;
1854
1850
while let Some ( next) = f( prev) {
0 commit comments