Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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));
}