[rust] Rust에서의 스레드 동작 제어

Rust는 안전하고 견고한 시스템 프로그래밍을 위한 언어로, 스레드를 사용하여 병렬성을 활용할 수 있습니다. 이 글에서는 Rust에서의 스레드 동작 제어에 대해 알아보겠습니다.

스레드 생성

Rust에서는 std::thread 모듈을 사용하여 스레드를 생성할 수 있습니다. 아래는 간단한 예제 코드입니다.

use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        // 스레드가 실행할 코드
        for i in 1..=5 {
            println!("스레드에서: {}", i);
            thread::sleep(std::time::Duration::from_millis(500));
        }
    });

    // 메인 스레드가 실행할 코드
    for i in 1..=3 {
        println!("메인 스레드에서: {}", i);
        thread::sleep(std::time::Duration::from_millis(1000));
    }

    handle.join().unwrap(); // 스레드의 완료를 기다림
}

위 코드는 메인 스레드와 새로운 스레드를 생성하고, 각각에서 간단한 작업을 수행한 후, 스레드의 완료를 기다리는 예제입니다.

스레드 간 통신

Rust는 std::sync 모듈을 사용하여 스레드 간에 안전하게 데이터를 공유할 수 있습니다. 아래는 Mutex를 사용하여 공유 데이터에 안전하게 접근하는 예제 코드입니다.

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

fn main() {
    let counter = Arc::new(Mutex::new(0));
    let mut handles = vec![];

    for _ in 0..10 {
        let counter = Arc::clone(&counter);
        let handle = thread::spawn(move || {
            let mut num = counter.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }

    println!("최종 값: {:?}", counter.lock().unwrap());
}

위 코드는 여러 스레드가 공유하는 카운터를 안전하게 증가시키고, 결과를 출력하는 예제입니다.

Rust를 사용하면 스레드를 생성하고, 스레드 간에 안전하게 데이터를 공유하고 조작하는 것이 비교적 쉽습니다. 따라서 Rust는 병렬 프로그래밍을 위한 강력한 도구로 사용될 수 있습니다.

참고 자료