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

면접 준비 중 동시성 제어 패턴을 복습하고 있습니다. Mutex 가드(LockGuard)의 스코프 문제로 인해 데드락이 발생하는 케이스를 구현해 보려 합니다.

코드:

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: locked");
        let _lock2 = data_clone.lock().unwrap();
    });

    handle.join().unwrap();
}

오류: 프로그램이 "Thread 1: locked" 출력 이후 더 이상 진행되지 않고 무한 대기 상태(deadlock)에 빠집니다.

시도: lock 변수를 사용하지 않고 바로 호출해 보았으나, 동일한 스레드 내에서 재진입(re-entrant) 시 발생하는 문제임을 확인했습니다.

질문: 위 코드처럼 동일한 스레드에서 Mutex를 중복 잠금 했을 때 발생하는 데드락을 방지하기 위해, Rust에서는 어떤 방식으로 LockGuard의 수명을 명시적으로 제한하는 것이 가장 권장되는 관례인가요?

모든 이야기1464

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

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