@@ -1809,11 +1809,10 @@ Note: This may call the function multiple times if the value has been changed fr
18091809the meantime, as long as the function returns `Some(_)`, but the function will have been applied
18101810but once to the stored value.
18111811
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.
18171816
18181817Using [`Acquire`] as success ordering makes the store part
18191818of 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.
18311830# Examples
18321831
18331832```rust
1834- #![feature(no_more_cas)]
18351833" , $extra_feature, "use std::sync::atomic::{" , stringify!( $atomic_type) , ", Ordering};
18361834
18371835let 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));
18411839assert_eq!(x.load(Ordering::SeqCst), 9);
18421840```" ) ,
18431841 #[ 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" ) ]
18471843 #[ $cfg_cas]
18481844 pub fn fetch_update<F >( & self ,
1849- mut f : F ,
1845+ set_order : Ordering ,
18501846 fetch_order: Ordering ,
1851- set_order : Ordering ) -> Result <$int_type, $int_type>
1847+ mut f : F ) -> Result <$int_type, $int_type>
18521848 where F : FnMut ( $int_type) -> Option <$int_type> {
18531849 let mut prev = self . load( fetch_order) ;
18541850 while let Some ( next) = f( prev) {
0 commit comments