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

Rust에서 Arc<Mutex<T>>를 사용하여 스레드 간 데이터 공유 시 deadlock이 발생하는 이유?

빗방울 2026.10.31 13:20 2분 읽기 조회 21 · 추천 2

과제로 여러 스레드가 공유 자원을 수정하는 프로그램을 만들고 있는데, 특정 조건에서 프로그램이 멈춰버립니다.

코드:

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);
        let lock2 = data.lock().unwrap(); 
    });

    let lock = data.lock().unwrap();
    handle.join().unwrap();
}

오류: 프로그램이 종료되지 않고 무한 대기 상태에 빠짐

시도: Mutex 대신 RwLock을 사용해봤지만 여전히 멈추는 현상이 발생했습니다.

질문: 코드에서 lock을 잡고 있는 상태에서 다시 lock을 호출하면 왜 데드락이 발생하는 건가요?

모든 이야기1488

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

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