[rust] 러스트 코드에서 다중 스레드 처리
러스트는 안전하고 병렬로 작동할 수 있는 코드를 쉽게 작성할 수 있는 강력한 다중 스레드 지원을 제공합니다. 다중 스레드 처리는 std::thread
모듈과 std::sync
모듈을 사용하여 구현할 수 있습니다. 이를 통해 여러 스레드에 작업을 분배하고, 공유 상태를 안전하게 관리할 수 있습니다.
스레드 생성하기
러스트에서 새로운 스레드를 생성하려면 std::thread
모듈을 사용합니다. 아래는 간단한 러스트 코드에서 스레드를 생성하는 예시입니다.
use std::thread;
fn main() {
let handle = thread::spawn(|| {
// 스레드에서 실행될 코드
});
// 기본 스레드와 생성한 스레드의 실행을 동기화
handle.join().unwrap();
}
데이터 공유 및 동기화
러스트는 std::sync
모듈을 통해 데이터를 안전하게 공유하고 동기화할 수 있는 여러 가지 도구들을 제공합니다. 예를 들어, Mutex
, Arc
, RwLock
등을 사용하여 공유 데이터에 안전하게 접근할 수 있습니다.
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let data = Arc::new(Mutex::new(0));
let data_shared = data.clone();
let handle = thread::spawn(move || {
let mut data = data_shared.lock().unwrap();
*data += 1;
});
handle.join().unwrap();
println!("{:?}", data.lock().unwrap());
}
이를 통해 안전하고 효율적으로 다중 스레드 환경에서 작동하는 러스트 코드를 작성할 수 있습니다.
참고 자료
- 러스트 공식 문서: https://doc.rust-lang.org/std/thread/
- The Rust Programming Language (러스트 프로그래밍 언어 책): 2판. 스티브 클라비 (Steve Klabnik), 카롤 니콜 (Carol Nichols) 지음. 옥타브북스.
런타임에서 안전한 데이터 공유 및 동기화는 병렬 처리를 구현하는데 중요한 요소이며, 러스트에서 이를 쉽고 안정적으로 처리할 수 있음을 알게 되었습니다.