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 客户端和多线程的主要内容,如果未能解决你的问题,请参考以下文章
Boost::asio - 如何中断阻塞的 tcp 服务器线程?