Я хочу создать производителя/потребителя с программой-менеджером в Go. Например: у меня есть 5 producers, 5 consumers and manager
. Производители имеют their own local arrays
, они перебирают их и отправляют элементы менеджеру. Потребители имеют their own local arrays
с информацией, которую потребляют элементы; они посылают их менеджеру тоже. У менеджера есть own array
, где хранится то, что и сколько элементов есть (например, если производитель отправляет 1 1 2 3 1 2 0
элементов, массив диспетчера выглядит как 1 3 2 1
(один 0, три 1, два 2 и один 3) и обрабатывает производителей 'и запросы потребителей - поместить элемент в массив (произвести) или удалить его (потреблять).Concurrent Producer and Consumer in Go
Возможно ли сделать такую программу в Go? Я уже сделал это в JAVA + CSP с каналами для отправки info и guard в менеджере, чтобы определить, какая процедура должна выполняться сначала, когда производитель и потребитель пытаются обработать один и тот же элемент (например, производитель хочет добавить 1 в массив менеджера и в то же время потребитель хочет потреблять 1) .
Любые exa спеты или советы приветствуются, потому что я не нахожу информацию о том, что я хочу делать. При необходимости я могу предоставить код JAVA + CSP.
ОБНОВЛЕНИЕ. Как насчет синхронизации (не брать из пустого массива)? Например, если потребитель хочет потреблять элемент из массива диспетчера, который еще не существует (например, потребитель хочет потреблять «3», но у менеджера нет ни одного из них), но у производителя есть этот элемент, и он будет выпущен после нескольких итерации - как я могу заставить потребителей проверять массив менеджеров снова и снова до тех пор, пока работа производителей не будет завершена? Должен ли я создавать структуры (или классы) для элементов потребителей и отмечать, что они используются или нет, или Go имеет конкретные методы для этого?
Просто нужно изменить эту строку 'for i: = range ns' to 'for _, i: = range ns' и все работает так, как ожидалось, спасибо. Но теперь у меня другая проблема, я обновил свой вопрос, если вы можете взглянуть. – Eddwhis