問題一覧に戻る
上級並行性
問題88: Arc(Atomic Rc)

Arc(アトミック参照カウント)は複数のスレッドが同じデータの所有権を共有できます。Rcと違い、Arcはスレッド安全のためアトミック操作を使用。Arcは不変アクセスのみ許可し、変更にはMutexと組み合わせます。参照カウントはアトミックに更新され、スレッド間で安全です。Arc::cloneは安価でアトミックカウンタを増やすだけです。

use std::sync::;
use std::thread;

fn main() {
// Arcの作成
let data = ::new(42);

// Arcのクローン
let data2 = Arc::();

let handle = thread::spawn(move || {
println!("Thread: {}", *data2);
});

println!("Main: {}", *data);
handle.join().unwrap();

// ArcとMutexの組み合わせ
use std::sync::Mutex;
let counter = Arc::new((0));
let c = Arc::clone(&counter);

thread::spawn(move || {
// Mutexをロック
*c.().unwrap() += 1;
}).join().unwrap();

println!("Count: {}", *counter.lock().());
}