【发布时间】:2016-03-05 06:18:34
【问题描述】:
我注意到 Rust 的 Atomic* 结构具有修改值的函数,例如 fetch_add。例如,我可以编写这个程序:
use std::sync::atomic::{AtomicUsize, Ordering};
struct Tester {
counter: AtomicUsize
}
impl Tester {
fn run(&self) {
let counter = self.counter.fetch_add(1, Ordering::Relaxed);
println!("Hi there, this has been run {} times", counter);
}
}
fn main() {
let t = Tester { counter: AtomicUsize::new(0) };
t.run();
t.run();
}
这编译并运行良好,但如果我将AtomicUsize 更改为普通整数,由于可变性问题,它将(正确)无法编译:
struct Tester {
counter: u64
}
impl Tester {
fn run(&self) {
self.counter = self.counter + 1;
println!("Hi there, this has been run {} times", self.counter);
}
}
【问题讨论】:
-
除了 Chris Morgans 的回答:您可以阅读所谓的内部可变性in the official
stddocumentation。RefCell是另一个例子。
标签: rust