semaphore max_capacity=20; // 이발소 안에 들어갈 수 있는 수 제한을 위해
semaphore sofa=4; //소파의 개수 4개
semaphore barber_chair=3, coord=3;
semaphore mutex1=1. mutex2=1; //상호배제를 위한 변수
semaphore cust_ready=0, leave_b_chair=0; payment=0; receipt=0;
semaphore finished[50]={0};
int count;
<!--[if !supportEmptyParas]--> <!--[endif]-->
void customer() // customer 스레드
{
int custnr;
semWait(max_capacity);
enter_shop(); //샵에 들어감
semWait(mutex1);
custnr=count;
count++;
semSignal(mutex1);
semWait(sofa);//소파를 기다림
sit_on_sofa();//소파에 앉음
semWait(barber_chair);//미용의자 기다림
get_up_from_sofa();//소파에서 일어남
semSignal(sofa);//소파 비었다고 통보
sit_in_barber_chair();//미용의자에 앉음
semWait(mutex2);
enqueuel(custnr);
semSignal(cust_ready);//미용준비됬다고 통보
semSignal(mutex2);
semWait(finished[custnr]);
leave_barber_chair();//미용의자 떠남
semSignal(leave_b_chair);//미용의자 떠났다고 통보
pay();//돈을 지불함
semSignal(payment);//돈 지불완료 통보
semWait(receipt);//영수증 기다림
exit_shop();//샵 나옴
semSignal(max_capacity);//샵 나왔다고 통보
}
<!--[if !supportEmptyParas]--> <!--[endif]-->
void barber() // barber스레드
{
int b_cust;
while(true)
{
semWait(cust_ready);//손님 기다림
semWait(mutex2);
dequeuel(b_cust);
semSignal(mutex2);
semWait(coord);
cut_hair();//미용함
semSignal(coord);
semSignal(finished[b_cust]);
semWait(leave_b_chair);//손님 떠나기를 기다림
semSignal(barber_chair);//손님 떠났다고 통보
}
}
<!--[if !supportEmptyParas]--> <!--[endif]-->
void cashier() //cashier스레드
{
while(true)
{
semWait(payment);//지불하기를 기다림
semWait(coord);
accept_pay();//지불 승인
semSignal(coord);
semSignal(receipt);//영수증 통보
}
}
주석안달린 빨간 부분좀 설명해줄 착한 분 없나요 ㅠㅠ 이해가 안되서요..
thread랑 semaphore연관지어 공부중인데
동기화 몰라?