Boost asio程序在多线程上崩溃

Posted

技术标签:

【中文标题】Boost asio程序在多线程上崩溃【英文标题】:Boost asio program crashes on multithread 【发布时间】:2017-04-11 16:59:49 【问题描述】:

我正在基于 boost::asio 库中的聊天示例构建一个嵌入式应用程序。服务器从客户端接收消息并在使用纯虚函数的接口上发送它们。然后从该接口恢复响应并将其发送回客户端。我无法让它正确地进入多线程,因为它在不同的位置崩溃。 http://www.boost.org/doc/libs/1_63_0/doc/html/boost_asio/examples.html

我想知道每个类中的所有共享对象是否应该声明为静态,受互斥体保护,我是否可以使用虚函数。如何修改此服务器,使其运行一个线程用于在网络上接收 msg,一个用于在接口上发送它,另一个用于恢复响应以发回给客户端,因为它们都是异步的。代码量很大,不知道怎么发这么多。 任何想法表示赞赏。谢谢

【问题讨论】:

分享您正在运行的确切代码 【参考方案1】:

感谢您的参与。经过更多不同策略的试验后,我能够让它发挥作用。我现在有两个 io 服务实例,一个管理网络 IO,另一个管理另一个设备接口。共享指针出现问题,该指针变为空。所以,我不得不使用“shared_from_this”而不是“this”,因为我的代码在类中。 这个例子帮助了我:Long-running / blocking operations in boost asio handlers。

【讨论】:

以上是关于Boost asio程序在多线程上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

多线程应用程序上的 boost::asio::ssl 访问冲突

多线程中boost asio中的随机EOF

Boost Asio总结class strand

Boost.Asio 异步 TCP 客户端和多线程

多线程和Boost::Asio

Boost.Asio、tcp::iostream 和多线程