首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >增强Asio J1939 /Can总线多线程处理

问增强Asio J1939 /Can总线多线程处理
EN

Stack Overflow用户
提问于 2022-05-03 13:38:13
回答 1查看 174关注 0票数 1

我正在Boost::ASIO和金丝雀之上实现一个金丝雀套接字处理程序。我以前的应用程序有一个套接字来侦听设备,发现的每个设备都有一个套接字。每个套接字将使用相同的接口(在本例中为can0)。根据我对SocketCan和J1939的理解,这是正确的方法。因为每个套接字都可以应用过滤器,只能从侦听设备获取消息。

在我的当前应用程序中,我已经在两个套接字上测试了async_read,其中两个线程正在执行io_context.run()。从日志上看,这似乎是非常好的。我猜这是因为内核在传递数据之前对每个套接字上的过滤器进行检查。然而,有了async_write,我对线程安全就更加不确定了。

假设所有的套接字都有相同的接口(can0),那么套接字需要共享一条链吗?还是每个套接字处理程序中的一条链足够了?或者内核中是否存在某种同步,这意味着写入CAN总线是线程安全的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 13:54:51

是的,内核中存在同步。例如,TCP套接字也是如此。他们还共享一个单一的网络接口(如eth0)。linux网络子系统确保不同的套接字(由不同的线程甚至进程使用)可以共享一个接口而不发生冲突。只有同时从多个线程访问一个套接字时,才需要同步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72100278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档