Стивенс Уильям Ричард
Шрифт:
6 Мы объявляем три семафора типа sem_t, и теперь это сами семафоры, а не указатели на них.
16-27 Мы вызываем sem_init вместо sem_open* а затем sem_destroy вместо sem_unlink. Вызывать sem_destroy на самом деле не требуется, поскольку программа все равно завершается.
Остальные изменения обеспечивают передачу указателей на три семафора при вызовах sem_wait и sem_post.
10.9. Несколько производителей, один потребитель
Решение в разделе 10.6 относится к классической задаче с одним производителем и одним потребителем. Новая, интересная модификация программы позволит нескольким производителям работать с одним потребителем. Начнем с решения из листинга 10.11, в котором использовались размещаемые в памяти семафоры. В листинге 10.12 приведены объявления глобальных переменных и функция main.