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

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

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

【问题讨论】:

    标签: c++ multithreading client boost-asio


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 2016-09-26
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多