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

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线程中使用。

如果由于共享资源等原因您需要某种锁定,您应该查看strands