간단하게 프로젝트 개요는 이렇습니다;
매장의 종업원 수와 손님을 수용할 수 있는 대기룸의 크기를 결정해 주는 프로그램 인데요..
예를 들어, 종업원이 3명이고 대기룸의 크기가 20인 경우
대기룸 에서 손님은 정해진 시간마다 1명씩 오게 되고 이를 큐에 집어 넣습니다.
그리고 종업원 들은 병렬적으로 대기룸에 손님을 요청합니다.
(이때 파일 입출력으로 락을 구현했습니다)
그러면 대기룸 프로세스 에서는 손님이 주문한 메뉴 정보를 파일 입출력으로 해당 프로세스에게 전달해 줍니다.
(대기룸 프로세스는 큐에 집어넣는 스레드와 종업원 프로세스가 락을 얻었는지 검사하는 스레드가 있습니다)
메뉴 정보를 얻은 종업원 프로세스는 해당 시간만큼 대기하고 다시 대기룸 프로세스에게 요청하고,
대기룸 프로세스에서 더이상 손님을 받을수 없는 경우(즉, 꽉찬경우)
해당 시뮬레이션은 실패를 기록하게 됩니다.
이게 원래 제 구현의도 였고 이렇게 동작하기를 기대했는데.. ;;
즉 종업원 프로세스 A B가 있는 경우,
A - 요청
B - 요청
A - 끝
A - 요청
B - 끝
이걸 기대한 거죠.. 하지만 막상 돌려보니
A - 요청
A - 끝
A - 요청
A - 끝
B - 요청
B - 끝
B - 요청
B - 끝
이딴식 입니다.. 예 맞습니다 ㅜㅜ 프로세스와 스레드의 차이점을 정확히 제가 몰랐던 거죠 ..;
그리고 위에는 sleep으로 프로세스를 느리게 만든 케이스고,
사실 sleep을 없애서 프로그램을 돌리면
QUEUE - IS FULL :: 시뮬레이션 실패
이게 콘솔에 뜹니다.. 즉 종업원 프로세스가 실행되기도 전에 큐에서 막 집어 넣게되는거죠 ㅜㅜ
아 .. 이거 어떻게 해결해야 할지 감이 안잡힙니다..;;
그렇다고 스레드로 돌리기도 애매한게 이번 수업 챕터가 프로세스라 프로세스간 통신을 하고 싶었거든요 ㅜㅜ
어떻게 해결해야 할까요 ㅜㅜ