Skip to content

Latest commit

 

History

History
12 lines (12 loc) · 1.38 KB

CS.md

File metadata and controls

12 lines (12 loc) · 1.38 KB

Dead lock

멀티 쓰레드 프로그래밍의 주요 난점 중 하나로, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다리며 무한 대기에 빠지는 상황을 말한다. 주요 패턴으로 ABA, AB/BA문제가 있는데, (1)_ AAB(=AB), AB/AB로 바꿔주거나_ (2)_ 락을 하나로 합치거나_ (3) 처리 시간대를 다르게 바꾸어 해결할 수 있다.

  • 발생조건(4가지 모두 만족하면 데드락이 발생)
    • 상호 배제 프린터 같이 동시에 건드리면 위험한 자원은 서로 다른 프로세스가 동시에 쓸 수 없다.
    • 점유 상태로 대기 자원을 붙잡은 상태에서 다른 자원을 기다리고 있는 상태이다. 예를 들어 여러개의 자원을 동시에 사용해야하는데 몇개는 할당이 끝났는데 남은 자원을 다른 프로세스가 놔주지 않아 서로의 자원을 기다리는 무한 대기에 빠지게 된다.
    • 선점 불가 중간에 뺏었다가는 큰일날 자원의 경우 다른 프로세스가 점유중인 자원을 뺏어올 방법이 없다.
    • 순환성 대기 대기가 꼬리를 물어 결국 자기 자신을 기다리는 상황이 되는 것이다. 이는 자원에 우선순위를 매기는 방식으로 해결이 가능하다.