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

Arc<Mutex<T>>를 이용한 공유 상태 업데이트 시 deadlock 발생 문제

빗방울 2026.10.30 15:35 2분 읽기 조회 10

과제로 멀티스레딩 환경에서 공유 자원을 업데이트하는 프로그램을 작성하고 있습니다. 여러 스레드가 동시에 데이터를 수정하고 읽어야 하여 Arc와 Mutex를 사용하였습니다.

코드:

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

fn main() {
    let data = Arc::new(Mutex::new(0));
    let data_clone = Arc::clone(&data);

    let handle = thread::spawn(move || {
        let lock = data_clone.lock().unwrap();
        let _inner_lock = data_clone.lock().unwrap(); 
        println!("Thread: {}", *lock);
    });

    let lock = data.lock().unwrap();
    println!("Main: {}", *lock);
    handle.join().unwrap();
}

오류: 프로그램이 출력 없이 무한 대기 상태(Deadlock)에 빠지며 종료되지 않음.

시도: MutexGuard의 스코프를 제한하기 위해 중괄호 `{}`를 사용해 보았으나, 로직이 복잡해지면서 여전히 락 해제 시점을 제어하는 데 어려움을 겪고 있습니다.

질문: 위 코드처럼 동일한 스레드 내에서 Mutex 락을 중복해서 요청했을 때 발생하는 데드락을 방지하고, 안전하게 값을 업데이트하려면 어떤 구조로 설계하는 것이 가장 효율적일까요?

모든 이야기1455

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

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