多线程访问泵阀资源导致冲突

问题

    由于泵阀板网络协议通过回调函数实现通信,该回调是不可重入的。一般指令的解析放在回调,处理用另一个线程完成。但是由于泵阀功能简单,则直接在回调中完成,因此当指令频繁,可能接受的第一条指令还未完成时,又接收到另一条指令,则第一条指令由于session id、src、addr未进行保存,会导致指令执行失败。

修改措施

  主控对泵阀发出的指令在一个专门的任务线程中集中处理,这个任务线程负责接受主控对泵阀的所有指令,并加入发送队列依次发送,对主控来说实现了并发,对泵阀来说依然是单线程。

你可能感兴趣的:(多线程访问泵阀资源导致冲突)