스레드와 동시성은 멀티스레딩 프로그래밍에서 중요한 주제 중 하나입니다. Rust에서는 스레드를 생성하고 조작할 수 있는 std::thread 모듈을 제공합니다. 다음은 스레드를 생성하고 실행하는 예제 코드입니다.
rustCopy code
use std::thread;
fn main() {
let handle = thread::spawn(|| {
for i in 1..=5 {
println!("Thread: {}", i);
}
});
for i in 1..=5 {
println!("Main: {}", i);
}
handle.join().unwrap();
}
Plain Text
복사
위 코드에서 thread::spawn 함수를 사용하여 스레드를 생성하고 실행합니다. 생성한 스레드는 1부터 5까지의 숫자를 출력합니다. 메인 스레드에서도 1부터 5까지의 숫자를 출력하고, 생성한 스레드가 완료될 때까지 대기합니다.
스레드를 사용할 때 가장 주의해야 할 것은 스레드 간 공유 자원을 안전하게 처리하는 것입니다. 이를 위해 Rust에서는 동기화와 뮤텍스를 사용합니다. 다음은 뮤텍스를 사용하여 공유 자원을 처리하는 예제 코드입니다.
rustCopy code
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let data = Arc::new(Mutex::new(0));
let mut threads = vec![];
for i in 1..=10 {
let data = data.clone();
let handle = thread::spawn(move || {
let mut data = data.lock().unwrap();
*data += i;
});
threads.push(handle);
}
for handle in threads {
handle.join().unwrap();
}
let data = data.lock().unwrap();
println!("Result: {}", *data);
}
Plain Text
복사
위 코드에서는 Arc와 Mutex 타입을 사용하여 공유 자원인 data 변수를 처리합니다. Arc는 Atomic Reference Counting을 의미하는 타입으로, 여러 스레드에서 data 변수를 공유하기 위해 사용됩니다. Mutex는 Mutual Exclusion을 의미하는 타입으로, 뮤텍스를 획득한 스레드만이 data 변수를 수정할 수 있도록 합니다. 생성한 스레드들은 각각 data 변수의 값을 1부터 10까지 더해주고, 메인 스레드에서는 스레드가 완료될 때까지 대기한 후, 최종 결과를 출력합니다.
스레드와 동시성은 멀티스레딩 프로그래밍에서 매우 중요한 주제 중 하나입니다. Rust에서는 안전하게 스레드를 생성하고 처리할 수 있도록 많은 도구들을 제공합니다. 또한, 공유 자원 처리와 관련하여 발생할 수 있는 문제점들에 대한 안전한 해결책들도 제공합니다. 이러한 기능들을 제대로 이해하고 사용할 수 있는 것은 중요한 역량 중 하나입니다.
따라서, 이러한 예제 코드들은 Rust에서 스레드와 동시성을 다루는 방법을 학습하는 데 도움이 됩니다. 이를 통해 Rust에서 안전하고 효율적인 멀티스레딩 코드를 작성하는 데 필요한 기본적인 개념들을 익힐 수 있습니다. Rust의 스레드와 동시성 처리에 대한 다양한 기능들을 보다 깊이 있게 이해하고, 이를 적극적으로 활용하여 안전하고 성능 좋은 코드를 작성할 수 있도록 도와줍니다.