名前は、Atomically Reference Counted (原子参照カウント)の略。
Arc<T>
はRc<T>
のマルチスレッドでも使える版です。型Atomic
を操作する為R<T>
よりもオーバーヘッドが高いです。またT
は Trait std::marker::Send と Trait std::marker::Sync を持っている必要があります。
use std::sync::Arc;
use std::thread;
let thirty_three: Arc> = Arc::new(vec![1, 2, 3]);
for _ in 0..3 {
let ref_thirty_three = thirty_three.clone();
let handler = thread::spawn(move || {
let repeated = ref_thirty_three.repeat(2);
assert_eq!(repeated, vec![1, 2, 3, 1, 2, 3]);
});
handler.join().unwrap();
}