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

Arc와 Mutex를 썼는데 왜 컴파일 타임에 borrow checker 에러가 날까요?

빗방울 2026.10.30 08:15 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 = Arc::clone(&data);
        let handle = thread::spawn(move || {
            let mut num = data.lock().unwrap();
            *num += 1;
        });
        handles.push(handle);
    }

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

오류: error[E0373]: closure may outlive the current function, but it borrows `data`, which is owned by the current function

시도: `move` 키워드를 추가해봤고, Arc를 사용해서 레퍼런스 카운팅을 적용했는데도 계속 에러가 납니다.

질문: `move` 클로저를 사용했는데도 왜 스레드 내부에서 `data`의 소유권 문제가 발생하는 건가요?

모든 이야기1454

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

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