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

Posted

技术标签:

【中文标题】Boost.Asio 异步 TCP 客户端和多线程【英文标题】:Boost.Asio Asynchronous TCP client and multi-threading 【发布时间】:2010-12-09 10:37:42 【问题描述】:

我的应用程序是一个与Boost.Asio chat client example 非常相似的 TCP 客户端。

我添加了几个单独的线程来调用 chat_client::write。这是否意味着我必须为 do_write 或 handle_write 添加锁定机制?有什么推荐的方法吗?

【问题讨论】:

【参考方案1】:

不,在这种情况下您不需要锁定它(通常)。事件将仅从运行 io_service 的线程处理。如果这只是一个,则不需要锁定。 post() 向 io_service 发送新消息对于多个调用线程来说已经是线程安全的。

在您的具体示例中,您可能希望按值而不是按引用来获取 chat_message,或者它可能会在 io_service 线程中使用之前超出 post()'ing 线程的范围。

【讨论】:

【参考方案2】:

如果您因为共享资源或其他原因需要某种锁定,您应该查看strands。

【讨论】:

以上是关于Boost.Asio 异步 TCP 客户端和多线程的主要内容,如果未能解决你的问题,请参考以下文章

C++ Boost.Asio - tcp 套接字异步写入

Boost::asio - 如何中断阻塞的 tcp 服务器线程?

使用 Boost Asio 在 TCP 套接字上执行异步写入操作

Boost asio 中的 TCP 客户端

C++ Boost Asio 简单聊天教程

boost::asio::ip::tcp实现网络通信的小例子