#Rust https://doc.rust-jp.rs/book-ja/ch04-02-references-and-borrowing.html#%E5%8F%AF%E5%A4%89%E3%81%AA%E5%8F%82%E7%85%A7 ## 概要 ```rust fn main() { let mut s = String::from("hoge"); let r1 = &mut s; let r2 = &mut s; // ここでエラーになる println!("{}, {}", r1, r2); } ``` ``` error[E0499]: cannot borrow `s` as mutable more than once at a time --> src\main.rs:5:14 | 4 | let r1 = &mut s; | ------ first mutable borrow occurs here 5 | let r2 = &mut s; | ^^^^^^ second mutable borrow occurs here 6 | 7 | println!("{}, {}", r1, r2); | -- first borrow later used here ``` ## 理由 競合を防ぐため。すなわち、以下3つの問題が同時に起こらないようにするため。 - 2つ以上の[[ポインタ]]が同じデータに同時にアクセスしている - 1つ以上の[[ポインタ]]がデータに書き込みを行っている - データへのアクセスを同期処理する機構が使用されていない