[c언어] 데드락(deadlock)과 스레드

예를 들어, 스레드 A가 자원 X를 획득한 채 자원 Y를 기다리고, 스레드 B는 자원 Y를 획득한 채 자원 X를 기다리는 경우가 있을 수 있습니다. 이러한 경우 스레드 A와 B가 서로를 기다리는 상태에 빠지게 되고, 이것이 바로 데드락입니다.

데드락이 발생하는 이유 중 가장 일반적인 것은 자원 순환입니다. 즉, 각 스레드가 한 자원을 보유한 채 다른 자원을 기다릴 때 발생합니다.

프로그래밍에서 데드락을 피하기 위해서는, 상호 배제와 같은 자원 접근을 조절하는 방법을 사용하고, 자원 요청에 타임아웃을 설정하여 특정 시간 내에 자원을 얻지 못하면 해당 스레드가 중지되도록 하는 등의 방법을 사용할 수 있습니다. 또한, 자원 접근의 순서를 일정하게 정하는 방법이나 자원을 동적으로 할당하는 방법을 통해 데드락을 피할 수도 있습니다.

이와 관련된 더 자세한 정보는 아래 링크에서 확인할 수 있습니다.