본문으로 바로가기
COMMUNITY모든 이야기

Arc<Mutex<T>>를 사용했는데 왜 borrow checker 에러가 나는 건가요?

빗방울 2026.10.30 12:33 2분 읽기 조회 7

면접 준비하면서 멀티스레딩 구현 연습 중인데, 공유 상태를 수정하려고 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_clone = Arc::clone(&data);
        let handle = thread::spawn(move || {
            let mut num = data_clone.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

    for handle in handles {
        handle.join().unwrap();
    }
    println!("Result: {}", *data.lock().unwrap());
}

오류: error[E0382]: use of moved value: `data`

note. expected due to move in loop

시도: Arc::clone을 사용해서 각 스레드에 넘겨줬고, move 클로저도 사용해봤습니다.

질문: 분명 Arc로 참조 횟수를 관리해서 복사본을 넘겨줬는데 왜 메인 함수에서 data가 이동되었다고 나오는지 모르겠어요.

모든 이야기1478

가벼운 안부부터 깊은 생각까지, 함께 나눠요.

글쓰기
총 1478개의 이야기
댓글