如何保证一个设备在某个时刻只被另外一个设备使用?

有多个子模块都要通过WIFI模块来发送数据,子模块发送数据的时间是随机的,而且WIFI模块
也会随机地接收收据,这样就有可能造成WIFI模块的使用竞争,请问如何解决这种竞争?

你可以模拟一下锁 在主进程中增加一个锁的变量 这个变量指向持锁的子模块 通过检测释放这个变量来实现

1.锁 持锁的可以访问wifi模块 没有的等待持锁的人释放
2.队列 和排队一样 一个一个来处理 也就不会有两个顾客同时访问营业员了

锁是在进程中才能用的吧,我的程序只有一个主进程,怎么用锁?

wifi模块发送数据部分使用线程安全的写队列,
wifi接受到数据 解码 push 到读队列中

别的模块发送数据 把数据push到写队列中,你的wifi模块 线程从写队列中读取数据 编码 内部发送出去
我觉得出现这样的问题是框架设计的问题
1 要保证wifi模块是否异步发送安全 如果能 直接把wifi模块 单例模式实现,比如写一个 WifiServer::senddata()别的模块发送数据调用这个函数 如果不能就用写队列实现
2 框架 模块之间互相通讯机制 比如实现简单 框架 广播所有模块 单播一个模块 模块的启动 退出 执行某 任务 例如 实现一个event事件通知机制
模块间通讯 通过event 发送
比如 调度线程 发送一个event 结构体
struct event
{
模块名称(这个可以是线程id 或者 自己随便定义)
业务类型(具体的业务类型)
优先级(业务的优先级 或者线程的优先级)
业务数据
}
说白了就是一个观察者模式
3 业务的理解 其实很多技术问题 本来不存在的 业务没有梳理好 只能在技术上弥补这个缺陷 平白无故增加许多技术负担,
按照你的描述
无非就是这样的场景
1wifi模块接受数据 解码 通知其他模块 知道这个是什么数据包 什么业务 这个模块去处理
2模块1处理完了 发送数据 wifi模块 直接发送数据出去
给你参考的 意见
1实现一个多模块的观察者模式 事件通知框架
2 用回调 或者 用线程安全的 信号 槽库 c++ boost signal2库 或者其他的信号库 去实现