[c++] 프로세스와 스레드의 데드락 방지 및 처리 방법

프로그램에서 데드락은 두 개 이상의 프로세스나 스레드가 서로의 작업이 끝나기를 기다리며 무한히 상태를 유지하는 현상을 말합니다. 이러한 상황이 발생하면 전체 시스템의 성능이 떨어지고 작업 완료가 불가능해질 수 있습니다. 이를 방지하고 처리하기 위한 방법을 살펴보겠습니다.

프로세스와 스레드의 데드락 방지 방법

상호배제(Mutual Exclusion)의 해제

프로세스나 스레드가 공유 자원을 점유한 상태에서 다른 프로세스나 스레드가 그 자원을 사용하려고 접근할 때, 상호배제 기법을 해제하여 데드락을 방지할 수 있습니다.

점유 대기(Occupy and Wait) 방지

프로세스나 스레드가 자원을 점유한 상태에서 다른 자원을 요청할 때, 현재 점유 중인 자원을 해제하고 모든 필요한 자원을 동시에 요청함으로써 데드락을 방지할 수 있습니다.

비선점(No Preemption) 기법

자원을 이미 점유한 프로세스나 스레드가 자원을 스스로 해제할 때까지 다른 프로세스나 스레드가 해당 자원을 강제로 빼앗을 수 없도록 하는 방법입니다. 이 기법은 데드락을 방지하는 방법 중 하나입니다.

프로세스와 스레드의 데드락 처리 방법

데드락 검출 및 복구

시스템이 데드락 상태인지 주기적으로 검사하고, 데드락이 발견되면 복구하기 위한 예방책을 마련하는 방법입니다.

자원 할당 그래프

자원 할당 그래프를 통해 데드락을 검출하고, 사이클이 존재하는 경우, 해당 사이클에 참여하는 프로세스나 스레드 중 하나를 강제로 종료시킴으로써 데드락을 처리할 수 있습니다.

데드락을 방지하고 처리하기 위해서는 해당 시스템의 특성과 요구되는 신뢰성 등을 고려하여 적절한 방법을 선택해야 합니다.

이렇게 프로세스와 스레드의 데드락을 방지하고 처리할 수 있는 방법을 간략히 살펴보았습니다.

자세한 내용은 아래의 참고 자료를 확인하시기 바랍니다.

참고 자료