我的应用程序是一个非常类似于Boost.Asio chat client example的TCP客户端。
我添加了一些调用chat_client :: write的独立线程。这是否意味着我必须为do_write或handle_write添加锁定机制?有没有推荐的方法?
答案 0 :(得分:2)
不,在这种情况下你不需要锁定它(通常)。事件将仅从运行io_service的线程处理。如果只有一个,则不需要锁定。 post()将新消息发送到io_service已经是来自多个调用线程的线程安全。
在您的特定示例中,您可能希望使用chat_message by-value而不是by-reference,或者在io_service线程中使用之前它可能超出post()的线程范围。
答案 1 :(得分:1)
如果由于共享资源或其他原因需要某种锁定,您应该查看strands。