P연산 : 검사, 감소시키려는 시도
s 값이 양의 값이면 감소 시킴
0이 되면 프로세스를 대기시킴
V연산 : 증가
대기중인 프로세스가 없다면 s값을 1증가시킴
대기중인 프로세스가 있으면 대기중인 프로세스 1개 진행
@진입영역
mutex가 1보다 크므로 0 으로 줄이고 임계영역 수행
다른프로세스가 봤을때 mutex가 0 이므로 해당 프로세스가 임계영역에 들어가지않고 대기함
@해제영역
대기하는게 있냐? -> 대기하는거 깨워가지고 임계영역에 들어와도 된다고 알림
대기하는게 없다 - > mutex 1증가하고 끝 (누군가가 들어갈수 있는 상황을 만들어줌)
@생산자 소비자 문제
버퍼가 가득찬 경우 (생산자가 추가적으로 데이터를 못넣음)
데이터를 넣기전에 P(empty)를 넣음
데이터를 꺼낸 다음에 V(empty)를 넣음 ->자리가 생겼다고 알리는 역할
empty: 빈칸이 몇개 남아있는지를 얘기해줌(초기값n)
P(empty) empty가 0이면 여기서 생산자가 기다리게됨
버퍼가 빈 경우
full은 초기값이 0 (가득찬게 몇개가 있느냐, 처음에는 없다는말)
버퍼가 비어있으니까 소비자는 기다려야하니까
소비자코드 앞부분에 P(full)
생산자는 버퍼에 데이터를 넣은 후 V연산을 통해서 full값을 1 증가시켜준다
V(full)을 통해 1개가 채워졌다고 소비자에게 알려줌
@판독기-기록기 문제
제1판독기-기록기문제 : 판독기에 우선순위
기아상태: 당장 아무것도하지못하고 계속 대기하는상황(언제끝날지모르는걸 기다려야하는 상황)
제2 판독기 기록기 문제
판독기가 공유자원에 접근중이라면 판독기보다 기록기에 우선순위를줌
문제점) 판독기의 기아상태 유발 가능
기록기가 쓰고있으면 다음 기록기가 계속 오면 판독기들이 하염없이 기다리게 됨 --> 판독기의 기아상태 유발