Arc & Mutex
- Arc: Atomic Reference Counter (멀티 스레드 Rc)
- Mutex: 상호 배제
let m = Mutex::new(data);
let mut num = m.lock().unwrap(); // data를 lock하고 수정
- Arc, 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!("Result: {}", *counter.lock().unwrap());
}