0
Я изучаю, как использовать семафор в C (linux).Использование семафора в C
Я хотел бы спросить вас:
Как определить, будет ли заказ будет выполнен немедленно, или подождать?
Example Я беру спать парикмахеру:
В функции:
void *customer(void *number) {
int num = *(int *)number;
// Leave for the shop and take some random amount of
// time to arrive.
printf("Customer %d leaving for barber shop.\n", num);
randwait(5);
printf("Customer %d arrived at barber shop.\n", num);
// Wait for space to open up in the waiting room...
sem_wait(&waitingRoom);
printf("Customer %d entering waiting room.\n", num);
// Wait for the barber chair to become free.
sem_wait(&barberChair);
// The chair is free so give up your spot in the
// waiting room.
sem_post(&waitingRoom);
// Wake up the barber...
printf("Customer %d waking the barber.\n", num);
sem_post(&barberPillow);
// Wait for the barber to finish cutting your hair.
sem_wait(&seatBelt);
// Give up the chair.
sem_post(&barberChair);
printf("Customer %d leaving barber shop.\n", num);
}
На линии sem_wait(&waitingRoom);
можно проверить ожидание - истинная ложь?
Я имею в виду:
int time = sem_wait(&waitingRoom);
if(time != 0)
printf("YOU MUST WAIT!");
ИЛИ
int i = isSemaphoreFree()...
Я надеюсь, вы меня понимаете, извините за мой английский :-)
then..возможно сделать цикл сна: 'while (sem_trywait() == - 1) sleep (5);'? – tilefrae
- Я пытаюсь, но он не работает, семафор всегда возвращает -1 .. – tilefrae
@tilefrae, проверьте наличие -1 в 'if' и' perror', чтобы увидеть ошибку. – ChiefTwoPencils