2014-11-29 3 views
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()... 

Я надеюсь, вы меня понимаете, извините за мой английский :-)

ответ

1

Взгляните на sem_trywait()sem_... docs

Это немедленно вернется с ошибкой, если семафор предварительно заблокирован.

+0

then..возможно сделать цикл сна: 'while (sem_trywait() == - 1) sleep (5);'? – tilefrae

+0

- Я пытаюсь, но он не работает, семафор всегда возвращает -1 .. – tilefrae

+0

@tilefrae, проверьте наличие -1 в 'if' и' perror', чтобы увидеть ошибку. – ChiefTwoPencils

Смежные вопросы