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

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

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

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

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

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

20 Апр в 13:16
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 503 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир