Boost.Asio异步TCP客户端和多线程
问题描述:
我的应用程序是一个非常类似于Boost.Asio chat client example的TCP客户端。Boost.Asio异步TCP客户端和多线程
我正在添加一些调用chat_client :: write的单独线程。这是否意味着我将不得不添加一个锁定机制do_write或handle_write?有没有推荐的方法?
答
不,您不需要在这种情况下锁定它(一般情况下)。这些事件只能从运行io_service的线程处理。如果那只有一个,则不需要锁定。 post()将新消息传递给io_service已经对多个调用线程是线程安全的。
在您的具体示例中,您可能希望采用chat_message by-value而不是by-reference,否则它可能在post()的线程中超出范围,然后在io_service线程中使用。