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

时间:2010-12-09 10:37:42

标签: c++ multithreading client boost-asio

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

我添加了一些调用chat_client :: write的独立线程。这是否意味着我必须为do_write或handle_write添加锁定机制?有没有推荐的方法?

2 个答案:

答案 0 :(得分:2)

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

在您的特定示例中,您可能希望使用chat_message by-value而不是by-reference,或者在io_service线程中使用之前它可能超出post()的线程范围。

答案 1 :(得分:1)

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