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

问题

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

修改措施

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程池ThreadPoolExecutor corepoolsize:核心池的大小,默认情况下,在创建了线程池之后...
    irckwk1阅读 765评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  •   一个任务通常就是一个程序,每个运行中的程序就是一个进程。当一个程序运行时,内部可能包含了多个顺序执行流,每个顺...
    OmaiMoon阅读 1,706评论 0 12
  • 人生变化无常,你也许会看到一个幼稚园小孩子脸上无邪的笑容,却不一定会看到他哭的最伤心的时候;你也可能看到某个拾...
    陌小新阅读 252评论 0 1
  • 耀日已经坠落,银河再无帝国。 应寒时应该是近乎完美的男主,有信仰坚持,强大优秀,反差萌的易害羞,戳萌点的兽耳和尾巴...
    微生安然阅读 950评论 0 0