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

Arc<Mutex<T>>를 사용하는데 왜 계속 dead lock이 발생하는지 모르겠어요.

빗방울 2026.10.30 05:19 2분 읽기 조회 13

서버에서 공유 자원을 여러 스레드가 동시에 수정하도록 구현하고 있는데, 특정 조건에서 서버가 응답하지 않고 멈춰버립니다.

코드:

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();
        println!("Thread 1 lock acquired");
        let _lock2 = data_clone.lock().unwrap(); 
    });

    let lock = data.lock().unwrap();
    println!("Main lock acquired");
    handle.join().unwrap();
}

오류: Main lock acquired 출력 이후 프로그램이 종료되지 않고 무한 대기 상태에 빠짐.

시도: Mutex 대신 RwLock으로 바꿔봤지만 여전히 같은 지점에서 멈췄고, lock 범위를 줄여보려 했으나 구조상 어려움이 있었습니다.

질문: Rust의 Mutex는 동일한 스레드에서 중복으로 lock을 요청했을 때 왜 자동으로 처리되지 않고 데드락이 발생하는 건가요?

모든 이야기1464

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

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