[rust] Rust에서의 스레드 동시성 패턴
Rust는 안전하고 고성능의 시스템 프로그래밍 언어로서, 스레드 동시성을 다루는 데 강력한 지원을 제공합니다. 이 글에서는 Rust에서 스레드를 다룰 때 자주 사용되는 일반적인 패턴들을 살펴보겠습니다.
목차
스레드 생성
Rust에서 스레드를 생성할 때는 std::thread
모듈을 사용합니다. 예를 들어, 새로운 스레드를 생성하고 실행하는 코드는 다음과 같습니다:
use std::thread;
fn main() {
let handle = thread::spawn(|| {
// 새로운 스레드에서 실행될 코드
});
handle.join().unwrap(); // 스레드 종료까지 기다림
}
스레드 간 통신
Rust에서는 std::sync
모듈을 사용하여 스레드 간에 안전하게 데이터를 공유할 수 있습니다. 예를 들어, Arc
와 Mutex
를 사용해 공유 데이터에 접근하는 코드는 다음과 같습니다:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let data = Arc::new(Mutex::new(0));
let handles: Vec<_> = (0..10)
.map(|_| {
let data = Arc::clone(&data);
thread::spawn(move || {
let mut val = data.lock().unwrap();
*val += 1;
})
})
.collect();
for handle in handles {
handle.join().unwrap();
}
println!("결과: {:?}", *data.lock().unwrap());
}
동시성 제어
Rust는 std::sync
모듈을 통해 다양한 동시성 제어 기능을 제공합니다. 예를 들어, 공유 데이터에 접근하는 동안에는 Mutex
를 사용하여 잠금을 걸고, 특정 시점에서 작업을 중단하고 싶을 때는 Barrier
를 사용할 수 있습니다.
에러 핸들링
Rust에서는 스레드 생성 또는 동시성 코드에서 발생하는 에러를 안전하게 처리할 수 있습니다. 예외를 전파하거나 에러를 처리하는 방법에 대해 자세히 알아보세요.
Rust는 멋진 동시성 지원을 통해 안전하고 효율적인 멀티스레드 프로그래밍을 가능하게 합니다. 프로젝트에 적합한 스레드 동시성 패턴을 선택하고, 안전하고 효율적인 동시성 코드를 작성해보세요.