[Rust 공식문서 한국어 정리] 110. Rust Sync 트레이트 가이드
[Rust 공식문서 한국어 정리] 110. Rust Sync 트레이트 가이드
원문 제목: Trait std::marker::Sync
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sync 트레이트가 제공하는 스레드 간 참조 공유 안전성을 상세히 다룹니다.
&T가 여러 스레드에서 동시에 접근 가능한 조건과 컴파일러 추론을 학습합니다.
Sync와 Send의 관계, !Sync 타입의 예시와 이유를 정리합니다.
Cell, RefCell, Rc가 Sync가 아닌 이유와 대안을 설명합니다.
unsafe impl Sync를 사용하여 커스텀 타입의 동기화를 보장하는 방법을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Sync — &T를 여러 스레드에서 안전하게 공유 가능
② !Sync — 스레드 간 참조 공유가 안전하지 않은 타입
③ Send와의 관계 — T가 Sync이면 &T는 Send임
④ Mutex, RwLock — !Sync 타입을 스레드 안전하게 감싸기
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sync 트레이트는 타입 T에 대한 불변 참조 &T가 여러 스레드에서 동시에 안전하게 사용될 수 있음을 나타냅니다.
Sync도 Send와 마찬가지로 마커 트레이트로 메서드가 없습니다.
모든 필드가 Sync인 구조체나 열거형은 자동으로 Sync입니다.
Cell는 Sync가 아닙니다.
Cell은 내부 가변성을 제공하므로 &Cell을 통해 여러 스레드에서 값을 수정하면 데이터 경쟁이 발생합니다.
RefCell도 Sync가 아닙니다.
RefCell의 런타임 빌림 검사는 스레드 안전하지 않으므로 참조 공유가 위험합니다.
Rc는 Sync가 아닙니다.
Rc의 참조 카운트는 원자적이지 않아 여러 스레드에서 &Rc로 접근하면 깨질 수 있습니다.
Mutex는 내부 데이터가 Send이면 Mutex는 Sync가 됩니다.
Mutex는 내부 동기화를 제공하여 &Mutex를 여러 스레드에서 안전하게 사용할 수 있습니다.
RwLock도 유사하게 Sync를 제공합니다.
Arc는 내부 데이터 T가 Sync + Send이면 Arc도 Sync + Send입니다.
unsafe impl Sync for MyType {}으로 수동으로 Sync를 구현할 수 있습니다.
이 경우 개발자가 &T의 스레드 간 공유가 안전함을 보증해야 합니다.
Send와 Sync의 관계는 T가 Sync이면 &T는 Send라는 것입니다.
즉 Sync 타입의 참조는 다른 스레드로 이동할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
여러 스레드에서 공유할 데이터는 Sync 경계를 만족하는 타입으로 선언합니다.
Cell, RefCell 대신 Mutex나 RwLock로 내부 가변성을 스레드 안전하게 만듭니다.
unsafe impl Sync로 내부 동기화를 직접 구현한 타입의 안전성을 보장합니다.
Arc> 패턴으로 여러 스레드 간 가변 상태를 안전하게 공유합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Sync는 스레드 간 참조 공유의 안전성을 보장하는 마커 트레이트입니다.
Cell, RefCell, Rc는 Sync가 아니므로 동기화 래퍼가 필요합니다.
Send와 Sync의 조합으로 Rust는 컴파일 타임에 데이터 경쟁을 원천 차단합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/marker/trait.Sync.html
Send and Sync: https://doc.rust-lang.org/nomicon/send-and-sync.html
#Rust #Sync #스레드안전성 #동시성 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30