use std::thread;
fn main() {
// static NUMBERS: [i32;3] = [1,2,3];
let numbers = vec![1,2,3];
thread::scope(|s| {
s.spawn(move ||{
for n in &numbers {
println!("{n}");
}
});
s.spawn(move ||{
println!("length, {}", numbers.len());
});
});
for n in numbers{
println!("{n}");
}
}
为什么这个特定的代码会给出错误,但使用 NUMBER(注释部分)不会给出错误? 我理解为什么数字会给出错误,因为数字的所有权已移至第一个线程,但在使用静态数字时不应观察到相同的问题,因为根据我对静态生命周期的理解,它只是意味着任何对 NUMBERS 的引用都可以保留到程序结束。
我预计代码也不适用于静态数字,但代码工作得很好
正如您已经提到的,
static
变量在程序的生命周期内有效。它本质上是只读的,因为您是通过引用访问它,所以没有问题。可变引用需要通过内部可变性进行同步,如 Mutex
。
另一个需要注意的重要事项是
static
物品无法移动。