arc-mutex

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());
}