Arc
スレッド間で共有所有権が必要な場合は、Arc(アトミック参照カウント)を使用できます。この構造体は、Clone 実装を通じて、参照カウンターを増加させながら、メモリヒープ内の値の場所を指す参照ポインターを作成できます。スレッド間で所有権を共有するため、ある値への最後の参照ポインターがスコープ外になると、その変数はドロップされます。
use std::time::Duration; use std::sync::Arc; use std::thread; fn main() { // この変数宣言で、その値が指定されます。 let apple = Arc::new("the same apple"); for _ in 0..10 { // これはメモリヒープ内の参照へのポインターであるため、 // ここでは値の指定はありません。 let apple = Arc::clone(&apple); thread::spawn(move || { // Arc が使用されているため、Arc 変数ポインターの場所に // 割り当てられた値を使用してスレッドを生成できます。 println!("{:?}", apple); }); } // 生成されたスレッドから、すべての Arc インスタンスが出力されるようにします。 thread::sleep(Duration::from_secs(1)); }