#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つ以上の[[ポインタ]]がデータに書き込みを行っている
- データへのアクセスを同期処理する機構が使用されていない