//create process for each visitor
for(i=0; i<visitor; i++)
{
int v_id=fork(); // AA
if(v_id==0)
{
wait(visitor_sem); // BB
visitorArrives();
sleep(2); //this sleep works fine
}
else{
wait(NULL); // CC
}
}
for(j=0; j<visitor;j++){
wait(NULL); // DD
}
Цель состоит в том, чтобы создать группу новых процессов на AA
. Каждый вновь созданный процесс становится посетителем на BB
. Затем, после того как мы создадим всех посетителей, мы ждем, пока они закончат на DD
. Это все имеет смысл.
Но что ждать в CC
?! Процесс, вызвавший fork
в точке AA
, должен продолжить цикл, чтобы создать следующего посетителя. Он не может ждать, пока посетитель, которого он только что создал, заканчивает на CC
- вот для чего DD
!
Удалите код else{wait..
в точке CC
, чтобы ваши посетители запускались одновременно.