本文簡要介紹rust語言中 std::sync::atomic::AtomicU8.fetch_update
的用法。
用法
pub fn fetch_update<F>( &self, set_order: Ordering, fetch_order: Ordering, f: F) -> Result<u8, u8> where F: FnMut(u8) -> Option<u8>,
獲取該值,並對其應用一個返回可選新值的函數。如果函數返回 Some(_)
,則返回 Ok(previous_value)
的 Result
,否則返回 Err(previous_value)
。
注意:如果同時其他線程更改了該值,則可能會多次調用該函數,隻要該函數返回 Some(_)
,但該函數隻會對存儲的值應用一次。
fetch_update
采用兩個 Ordering
參數來說明此操作的內存順序。第一個說明了操作最終成功時所需的順序,而第二個說明了加載所需的順序。這些分別對應 AtomicU8::compare_exchange
的成功和失敗順序。
使用 Acquire
作為成功排序使存儲成為此操作的一部分 Relaxed
,使用 Release
使最終成功加載 Relaxed
。 (失敗的)加載排序隻能是 SeqCst
、 Acquire
或 Relaxed
,並且必須等於或弱於成功排序。
注意:此方法僅適用於支持原子操作的平台u8
.
例子
use std::sync::atomic::{AtomicU8, Ordering};
let x = AtomicU8::new(7);
assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |_| None), Err(7));
assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| Some(x + 1)), Ok(7));
assert_eq!(x.fetch_update(Ordering::SeqCst, Ordering::SeqCst, |x| Some(x + 1)), Ok(8));
assert_eq!(x.load(Ordering::SeqCst), 9);
相關用法
- Rust AtomicU8.fetch_sub用法及代碼示例
- Rust AtomicU8.fetch_or用法及代碼示例
- Rust AtomicU8.fetch_min用法及代碼示例
- Rust AtomicU8.fetch_nand用法及代碼示例
- Rust AtomicU8.fetch_add用法及代碼示例
- Rust AtomicU8.fetch_xor用法及代碼示例
- Rust AtomicU8.fetch_and用法及代碼示例
- Rust AtomicU8.fetch_max用法及代碼示例
- Rust AtomicU8.from_mut用法及代碼示例
- Rust AtomicU8.as_mut_ptr用法及代碼示例
- Rust AtomicU8.store用法及代碼示例
- Rust AtomicU8.get_mut用法及代碼示例
- Rust AtomicU8.compare_exchange用法及代碼示例
- Rust AtomicU8.into_inner用法及代碼示例
- Rust AtomicU8.compare_and_swap用法及代碼示例
- Rust AtomicU8.swap用法及代碼示例
- Rust AtomicU8.compare_exchange_weak用法及代碼示例
- Rust AtomicU8.new用法及代碼示例
- Rust AtomicU8.load用法及代碼示例
- Rust AtomicU32.fetch_min用法及代碼示例
- Rust AtomicUsize.load用法及代碼示例
- Rust AtomicU16.into_inner用法及代碼示例
- Rust AtomicU16.from_mut用法及代碼示例
- Rust AtomicU32.fetch_max用法及代碼示例
- Rust AtomicU64.into_inner用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::sync::atomic::AtomicU8.fetch_update。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。