코드로 설계, 하드웨어적인 해결 방법, 피터슨 알고리즘, 데어 알고리즘, 세마포어, 모니터 등을 사용함
- 하드웨어적인 해결 방법
검사와 지정(코드 잠금 검사와 잠금 설정을 하드웨어적으로 동시에 실행)을 사용하여 임계해결 문제를 쉽게 해결하는 방법
바쁜 대기를 사용하여 검사하기 때문에 시스템 자원 낭비 발생
- 피터슨 알고리즘, 데커 알고리즘
임계구역 해결 조건을 모두 만족하는 소프트웨어적인 해결 방법
알고리즘이 복잡하며 프로세스 수에 대한 확장성이 떨어지기 때문에 현재 잘 사용되지 않음
- 세마포어
임계구역에 진입하기 전에 스위치를 사용 중으로 놓고 임계구역으로 들어가는 방법
세마포어 큐에서 프로세스를 관리함
- Semaphore(n)
초기 설정 시 사용
전역 변수 RS를 n 으로 초기화 함
RS 는 현재 사용 가능한 자원의 수
- P()
잠금을 수행하는 코드
검사와 지정 동시에 사용함
RS 가 0보다 크면 1만큼 감소시키고 임계구역에 진입
0보다 작으면 0보다 커질 때 까지 세마포어 큐에 저장됨
- V()
잠금 해제와 동기화를 같이 수행하는 코드
RS 값을 1 증가시키고 세마포어 큐에서 기다리는 프로세스에게 임계구역에 진입해도 좋다는 wake_up 신호 보냄
간단하고 사용하기 쉬움
- 모니터
세마포어 알고리즘을 자동으로 처리하도록 설계한 코드
보호할 자원을 임계 구역으로 숨기고 임계구역에서 작업할 수 있는 인터페이스만 제공하여 자원을 보호
사용자들의 잘못된 세마포어 사용으로 임계구역이 보호받지 못 하는 문제 해결
- 상태 변수
임계구역 보호와 동기화를 위해 사용하며 wait(), signal() 기능 제공
- wait()
모니터 큐에서 자신의 차례가 올 때까지 기다림
세마포어의 P() 에 해당
- signal()
모니터 큐에서 기다리는 다음 프로세스에 순서를 넘겨줌
세마포어의 V() 에 해당