эмулировать радиосвязь с использованием канала или мьютекса - PullRequest
1 голос
/ 22 декабря 2019

Мне нужно эмулировать сеть радиосвязи, состоящую из N узлов, со следующими свойствами:

  1. узлы либо отправляют, затем получают данные, либо получают, а затем отправляют данные, но не одновременно.
  2. данные, передаваемые по радиоканалу, принимаются всеми узлами, которые в это время находятся в режиме приема.
  3. если два или более узлов отправляют данные одновременно, данные теряются.
  4. синхронизация времени между узлами отсутствует.

В Go, если я использую канал для эмуляции среды передачи, данные сериализуются, и только один получатель получает данные, а не все.

Кроме того, я не могу придумать, как "испортить" данные, если два отправителя пытаются отправить их одновременно. Независимо от того, использую я мьютекс или нет, один из отправителей успешно отправит свое сообщение.

1 Ответ

1 голос
/ 22 декабря 2019

Почему бы вам не создать модуль издателя и подписчика с использованием каналов Голанга.

Создайте централизованную систему очередей, в которой все ваши узлы отправителя и получателя регистрируют себя. Если какой-либо узел отправляет данные, которые он отправит в этот модуль и из списка отправителей, он выбирает канал отправителей и начинает запись в него. То же самое относится и к приемникам.

Необходимо создать один канал на узел и зарегистрировать его в центральном пабе / субмодуле. Это определенно решит вашу проблему.

...