Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

예제

Arc와 Mutex의 λ™μž‘μ„ μ‚΄νŽ΄λ΄…μ‹œλ‹€:

use std::thread;
// std::sync::{Arc, Mutex}; μ‚¬μš©

fn main() {
    let v = vec![10, 20, 30];
    let handle = thread::spawn(|| {
        v.push(10);
    });
    v.push(1000);

    handle.join().unwrap();
    println!("v: {v:?}");
}

κ°€λŠ₯ν•œ ν•΄κ²°μ±…:

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

fn main() {
    let v = Arc::new(Mutex::new(vec![10, 20, 30]));

    let v2 = Arc::clone(&v);
    let handle = thread::spawn(move || {
        let mut v2 = v2.lock().unwrap();
        v2.push(10);
    });

    {
        let mut v = v.lock().unwrap();
        v.push(1000);
    }

    handle.join().unwrap();

    println!("v: {v:?}");
}

λˆˆμ—¬κ²¨ λ³Ό λΆ€λΆ„:

  • vλŠ” Arc와 Mutex λͺ¨λ‘μ— ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Arc와 Mutexκ°€ μ„œλ‘œ μ™„μ „νžˆ λ‹€λ₯Έ 문제λ₯Ό μœ„ν•œ 도ꡬ이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
    • Mutexλ₯Ό Arc둜 λž˜ν•‘ν•˜λŠ” 것은 κ°€λ³€ μƒνƒœλ₯Ό μŠ€λ ˆλ“œλ“€ 간에 κ³΅μœ ν•  λ•Œ ν”νžˆ μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.
  • v: Arc<_>λ₯Ό λ‹€λ₯Έ μŠ€λ ˆλ“œμ—μ„œ μ‚¬μš©ν•˜λ €λ©΄, λ¨Όμ € v2둜 볡사λ₯Ό ν•˜κ³  이λ₯Ό κ·Έ μŠ€λ ˆλ“œλ‘œ 이동 ν•΄μ•Ό ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ λžŒλ‹€μ˜ μ‹œκ·Έλ‹ˆμ²˜μ— moveκ°€ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.
  • 블둝은 LockGuard의 λ²”μœ„λ₯Ό μ΅œλŒ€ν•œ 쒁히기 μœ„ν•΄ μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.