Arc — 스레드 간 공유 소유권 스마트 포인터
Arc — 스레드 간 공유 소유권 스마트 포인터
Arc<T>(Atomically Reference Counted)는 스레드 간에 안전하게 공유되는 소유권을 가진 스마트 포인터예요.
출처: Rust 공식 문서
본문
pub struct Arc<T: ?Sized> { /* private fields */ }
Arc는 값 T에 대한 공유 소유권을 제공해요. 참조 카운팅(reference counting)을 사용하며, 카운트가 원자적으로 증가/감소하여 여러 스레드가 안전하게 Arc를 공유할 수 있어요. Rc와 달리 Send/Sync이므로 스레드 간 이동이 가능해요. target_has_atomic=ptr 플랫폼에서만 사용할 수 있어요.
주요 메서드
pub fn new(data: T) -> Arc<T>
pub fn try_new(data: T) -> Result<Arc<T>, AllocError>
pub fn strong_count(this: &Self) -> usize
pub fn weak_count(this: &Self) -> usize
pub fn get_mut(this: &mut Self) -> Option<&mut T>
pub fn ptr_eq(this: &Self, other: &Self) -> bool
pub fn downgrade(this: &Self) -> Weak<T>
pub fn make_mut(this: &mut Self) -> &mut T
예시
use std::sync::Arc;
let five = Arc::new(5);
let five2 = Arc::clone(&five); // 참조 카운트 증가
assert_eq!(*five2, 5);
Arc<T>는 Deref를 구현해 내부 T에 접근할 수 있어요. 순환 참조를 막기 위해 Weak와 함께 자주 사용해요.