자 스물 여덟번째 키워드 '데드락'을 알아보겠다.
데드락은 프로세스와 스레드의 개념에서 꼭 나오는 이야기 중 하나이기에 접목해서 알아보았다.

데드락은 컴퓨터 과학에서 발생하는 중요한 문제 중 하나이다. 이는 다중 프로세스나 스레드를
사용하는 시스템에서 발생할 수 있는 상황을 말한다.
데드락은 각 프로세스나 스레드가 서로가 가진 자원을 기다리며 진행하지 못하는 상태를 의미한다.
말 그대로 각각의 스레드가 한개의 자원을 접근하고 싶은데 이미 선점한 스레드가 일은 마무리를
하지 못해 무한정으로 대기를 한다고 생각하면 될 것 같다.
데드락은 시스템이 정체되고 작업이 진행되지 않는 상황을 초래할 수 있어 심각한 문제가 될 수 있다.
일반적으로 데드락은 아래의 네가지 조건이 모두 충족이 될 때 발생한다.
상호 배제: 자원은 한 번에 하나의 프로세스나 스레드에 의해서만 사용될 수 있어야 한다.
점유 대기: 프로세스나 스레드가 이미 자원을 가지고 있는 상태에서 다른 자원을 기다린다.
비선점: 다른 프로세스나 스레드가 이미 사용 중인 자원을 강제로 빼앗아 사용할 수 없어야 한다.
순환 대기: 여러 프로세스나 스레드가 자원을 순환적으로 기다리며, 각각이 다음에 필요한 자원을 가지고 있는다.
데드락을 예방하기 위해서는 다음 네가지 조건 중 하나를 제거해야 예방이 된다.
발생 조건중에 1개 이상을 제거 : 상호배제, 점유대기, 비선점, 순환 대기중 한개 이상을 제거하거나 예측하여 발생하게 하지 않는다면 예방이 가능하다.
자원 순서화: 모든 프로세스가 자원을 동일한 순서로 요청하도록 강제함으로써 데드락을 예방할 수 있다.
자원 공유: 가능한 경우 자원을 공유함으로써 데드락을 방지할 수 있다. 공유 자원을 사용할 때는 여러 프로세스가 동시에 접근할 수 있도록 적절한 동기화 메커니즘을 사용하여 충돌을 방지할 수 있다.
시간 제한: 자원 요청에 대한 타임 아웃을 설정하여 무한정 대기하는 것을 방지하고, 타임 아웃이 발생하면 자원을 반환하고 다른 작업을 수행하도록 한다. 이를 통해 데드락 상황을 빠르게 감지하고 대응할 수 있다.
스레드와 프로세스의 개념을 어느정도 알고있었고 기사를 준비하며 데드락도 얼추 알고 있었다.
하지만 새롭게 배운다는 생각으로 키워드를 공부하고 접근하니 이해가 쉬웠다.