使用通道或互斥体模拟无线电通信
emulate radio communication using channel or mutex
我需要模拟一个由 N 个节点组成的无线电通信网络,具有以下属性:
- 节点要么发送然后接收数据,要么接收然后发送数据,但不能同时进行。
- 空中发送的数据被当时处于接收模式的所有节点接收。
- 如果两个或多个节点同时发送数据,数据将丢失。
- 节点之间没有时间同步。
在Go中,如果我使用一个通道来模拟传输媒体,数据是序列化的,只有一个接收者得到数据,而不是所有的接收者。
此外,如果两个发件人试图同时发送数据,我想不出一种方法 "ruin" 数据。无论我是否使用互斥锁,其中一个发件人都会成功发送消息。
为什么不使用 Golang Channels 创建 发布者和订阅者 模块。
创建一个集中式排队系统,您的所有发送方和接收方节点都可以在其中自行注册。如果任何节点发送数据,它将转到该模块并从发送者列表中选择发送者通道并开始写入。这同样适用于接收器。
您必须为每个节点创建一个通道并将其注册到中央 pub/sub 模块。这绝对能解决你的问题。
我需要模拟一个由 N 个节点组成的无线电通信网络,具有以下属性:
- 节点要么发送然后接收数据,要么接收然后发送数据,但不能同时进行。
- 空中发送的数据被当时处于接收模式的所有节点接收。
- 如果两个或多个节点同时发送数据,数据将丢失。
- 节点之间没有时间同步。
在Go中,如果我使用一个通道来模拟传输媒体,数据是序列化的,只有一个接收者得到数据,而不是所有的接收者。
此外,如果两个发件人试图同时发送数据,我想不出一种方法 "ruin" 数据。无论我是否使用互斥锁,其中一个发件人都会成功发送消息。
为什么不使用 Golang Channels 创建 发布者和订阅者 模块。
创建一个集中式排队系统,您的所有发送方和接收方节点都可以在其中自行注册。如果任何节点发送数据,它将转到该模块并从发送者列表中选择发送者通道并开始写入。这同样适用于接收器。
您必须为每个节点创建一个通道并将其注册到中央 pub/sub 模块。这绝对能解决你的问题。