[rust] Rust의 스레드 기본

Rust는 안전하고 안정적인 시스템 프로그래밍 언어로서, 스레드를 쉽게 다룰 수 있도록 지원합니다. 이 포스트에서는 Rust에서의 스레드를 생성하고 다루는 기본적인 방법에 대해 알아보겠습니다.

스레드 생성

Rust에서는 std::thread 모듈을 사용하여 스레드를 생성합니다. 다음은 간단한 예제 코드입니다.

use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        // 스레드에서 실행할 코드 작성
    });

    // 스레드의 실행이 끝날 때까지 대기
    handle.join().unwrap();
}

위의 코드에서 thread::spawn 함수를 사용하여 새로운 스레드를 생성하고, 람다 함수를 전달하여 스레드에서 실행할 코드를 작성합니다.

스레드 간 데이터 공유

Rust에서는 스레드 간의 데이터 공유를 위해 ArcMutex를 제공합니다. Arc는 데이터에 대한 참조 카운팅을, Mutex뮤텍스 락을 제공하여 스레드 간 안전하게 데이터를 공유할 수 있게 합니다. 다음은 이를 활용한 예제 코드입니다.

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

fn main() {
    let data = Arc::new(Mutex::new(0));

    let mut handles = vec![];

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

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

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

위의 코드에서 ArcMutex를 사용하여 여러 스레드에서 안전하게 데이터를 증가시키는 예제를 살펴볼 수 있습니다.

결론

Rust는 안전하고 효율적인 스레드 처리를 위한 강력한 도구를 제공합니다. 이를 통해 병렬 처리를 통한 성능 향상 및 안전한 데이터 공유를 쉽게 구현할 수 있습니다.

더 많은 정보를 원하시면 Rust 공식 문서를 참고하세요.