Соответствующие фрагменты кода из двух программ приведены ниже.По сути, потребитель вытесняет целое число из общего буфера, а производитель помещает целое число в командную строку.Без вызова спать в конце цикла возникает тупик.То есть оба процесса, кажется, ожидают семафор.Я не понимаю, как это могло произойти, и был бы признателен за объяснение.Кроме того, дайте мне знать, если есть подходящая альтернатива моему «сну, чтобы позволить другому процессу получить шанс».Моя интуиция говорит мне, что должно быть, и это было главной причиной, по которой я решил опубликовать этот вопрос.
Потребитель:
while (get_success == 0) {
// critical section
sem_wait(semaphore);
if (*top != *bottom || *empty == 0) { // not empty
printf("Stored Integer: %d\n", buffer[*bottom]);
*bottom = (*bottom + 1) % N;
if (*bottom == *top)
*empty = 1;
get_success = 1;
}
sem_post(semaphore);
// end critical section
if (get_success == 0)
sleep(1);
}
Производитель:
while (ins_success == 0) {
// critical section
sem_wait(semaphore);
if (*top != *bottom || *empty == 1) { // not full
buffer[*top] = atoi(input);
*empty = 0;
*top = (*top + 1) % N;
ins_success = 1;
}
sem_post(semaphore);
// end critical section
if (ins_success == 0)
sleep(1);
}
Спасибо!