[英]Why does Rust enforce objects can only be mutably borrowed once?
還沒有Send
/ Sync
嗎? 官方文件只提到它與數據競賽有關。
因為內存安全 。
考慮以下示例(忽略編譯后將導致無限循環的事實):
let mut list = vec![1, 2, 3];
for item in &list {
list.push(*item + 1);
println!("item = {}", item);
}
item
是對list
保存的內存的引用; 它是&i32
類型。 您可以通過取消引用( *item
)來讀取該元素的值。
如果push
調用將向量的內存重新分配到其他地址,則item
的引用會發生什么情況?
然后,引用將包含舊地址。 任何訪問它的嘗試都將涉及讀取一些未定義的內存。 這違反了Rust的核心安全原則。
還沒有
Send
/Sync
Send
和Sync
與多個線程有關。 從上面的示例中可以看到,不需要線程即可潛在地產生無效的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.