問題一覧に戻る
上級並行性
問題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().());
}