[rust] Rust에서의 스레드 통신

Rust는 안전하고 효율적인 시스템 프로그래밍을 지원하는 언어입니다. 스레드 간 효율적인 통신은 병렬 프로그래밍에 있어 매우 중요합니다. Rust에서는 여러 가지 방법을 통해 스레드 간 안전하고 효율적인 통신을 지원합니다.

1. 메시지 전달을 통한 통신

Rust에서는 std::sync::mpsc 모듈을 통해 메시지 전달을 사용하여 스레드 간 통신을 할 수 있습니다. 이 모듈은 multiple producer, single consumer 패턴을 지원하여 여러 개의 스레드가 하나의 수신자에게 메시지를 보낼 수 있습니다.

예를 들어, 다음은 메시지 전달을 사용하여 스레드 간에 정수를 전송하는 예제입니다.

use std::sync::mpsc;
use std::thread;

fn main() {
    let (sender, receiver) = mpsc::channel();

    thread::spawn(move || {
        sender.send(10).unwrap();
    });

    let received = receiver.recv().unwrap();
    println!("Received: {}", received);
}

2. 공유 상태를 통한 통신

Rust의 std::sync 모듈을 사용하면 여러 스레드 간에 공유된 상태를 안전하게 사용할 수 있습니다. 예를 들어, ArcMutex를 사용하여 여러 스레드에서 접근하는 데이터의 동시성을 보장할 수 있습니다.

다음은 ArcMutex를 사용하여 공유된 벡터를 여러 스레드에서 안전하게 업데이트하는 예제입니다.

use std::sync::{Arc, Mutex};
use std::thread;

fn main() {
    let data = Arc::new(Mutex::new(vec![]));

    for i in 0..3 {
        let data_ref = data.clone();
        thread::spawn(move || {
            let mut data = data_ref.lock().unwrap();
            data.push(i);
        });
    }

    thread::sleep(std::time::Duration::from_secs(1)); // 모든 스레드가 실행을 마치도록 대기
    println!("{:?}", data.lock().unwrap());
}

Rust에서 스레드 간 효율적인 통신을 위해 메시지 전달 및 공유 상태를 활용한다면, 안전하고 병렬적인 프로그래밍을 할 수 있습니다.

더 자세한 내용은 Rust 공식 문서를 참고할 수 있습니다.