둘 이상
의 Thread가 한 공유 자원
에 접근할 때, 오직 한 Thread만 접근을 허용해야 하는 경우 사용multi-Thread 환경
에서 하나의 thread가 공유 자원을 점유하고 있을 때, 나머지 thread들이 작업이 끝나기를 하염없이 기다리는 상태
두 기법 모두 완벽한 기법은 아니다.
이 기법들을 쓰더라도 데이터 무결성을 보장할 수 없으며 데드락이 발생할 수도 있다.
하지만, 상호배제를 위한 기본적인 기법이며 여기에 좀 더 복잡한 매커니즘을 적용해 꽤나 우아하게 동작하는 프로그램을 구현할 수 있다.
위의 4가지 조건을 모두 충족할 경우 데드락이 발생
반대로 말하면, 위 4가지 중 하나라도 충족하지 않을 경우 데드락을 해결할 수 있다는 뜻
하나의 자원
을동시에 접근
할 수 있는 Thread의 수
를 제어할 수 있게 하는 기법2개 이상 Thread 수
를 나타내는 값을 두는 기법Thread 수를 한 개
로 처리하는 기법!semaphore가 접근 차단!
!semaphore가 접근 차단!
!semaphore가 접근 차단!
!semaphore가 접근 차단!
한 개로 처리
하는 기법차단
후 해당 스레드 대기 큐로 보냄차단
후 해당 스레드 대기 큐로 보냄차단
후 해당 스레드 대기 큐로 보냄차단
후 해당 스레드 대기 큐로 보냄점유하고 있는 스레드
만 unlock
할 수 있지만, 세마포어는 점유하고 있지 않는(놀고 있는)스레드도 unlock
을 할 수 있다.📌 여담
📚 참고