Как запустить два процесса одновременно? Задача про Producer&Consumer. Цель задачи в том, что есть два процесса и один общий буфер информации. Один процесс заполняет буфер, а другой берет оттуда информацию. Как я понял нужно использовать fork(). Если буфер пуст, то взять инфу нельзя, а если полон, то нельзя заполнять.
Я разобрался с fork(), при вызову этого метода, мы дублируем весь процесс после него. Один выполняется отцом, а другой сыном. Сейчас, когда я пишу, то всегда сначала выполняется отец, а потом сын. Как сделать что-бы они работали одновременно? Ну, или чередовались хаотично а не 1010101010 (1 - отец, 0 - сын)

21 Авг 2019 в 06:32
304 +1
0
Ответы
1

Для того, чтобы процессы работали параллельно, вам нужно использовать механизм синхронизации, например, семафоры или мьютексы.

Например, вы можете использовать семафоры для контроля доступа к общему буферу. Один семафор будет использоваться для сигнализации, что буфер заполнен, а другой — что буфер пуст.

Когда процесс Producer хочет поместить информацию в буфер, он уменьшает счетчик пустых слотов семафора на 1. Если счетчик становится отрицательным, процесс Producer блокируется до тех пор, пока не станет доступен хотя бы один слот в буфере. Аналогично, процесс Consumer уменьшает счетчик заполненных слотов на 1 и блокируется, если буфер пуст.

С помощью семафоров и корректной реализации вашего алгоритма Producer-Consumer вы сможете добиться параллельной работы двух процессов.

20 Апр 2024 в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир