盛安安*_*盛安安 1 types type-systems pointers rust
是不是已经Send/ Sync?官方文件只提到它与数据竞赛有关.
因为记忆安全.
考虑这个例子(忽略这个事实,如果它编译会导致无限循环):
let mut list = vec![1, 2, 3];
for item in &list {
list.push(*item + 1);
println!("item = {}", item);
}
Run Code Online (Sandbox Code Playgroud)
item是对所持记忆的参考list; 它是类型的&i32.您可以通过解除引用它来读取该元素的值(*item).
item如果push调用将向量的内存重新分配给不同的地址,那么引用会发生什么?
然后引用将包含旧地址.任何访问它的尝试都将涉及读取一些未定义的内存块.这违反了Rust的核心安全原则.
还没有
Send/Sync
Send并Sync关注多线程.从上面的示例中可以看出,您不需要线程来潜在地生成无效引用.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |