gpt4 book ai didi

sockets - boost::asio 套接字 async_* 链

转载 作者:行者123 更新时间:2023-12-04 04:13:19 28 4
gpt4 key购买 nike

如何通过 strand 对套接字执行 async_* 操作?我看过 Timer.5(Boost/Asio 示例),但它们只显示了如何调用用户的处理程序。当我async_write到多线程应用程序中的套接字的数据可能被写入损坏。还有一个 strand保证这些处理程序都不会同时执行。

最佳答案

来自 Boost.Asio 文档:

The io_service::strand class provides the ability to post and dispatch handlers with the guarantee that none of those handlers will execute concurrently.



a good examplestrand 中的用法Boost.Asio 例子。
strand保证您的处理程序执行将同步。这意味着 strand如果您的 io_service 很有用从多个线程执行。它与您如何安排任务(处理程序)无关。
strand无法帮助您同时执行多个套接字读取或写入操作,因为内部读取/写入执行不能同时完成,因此应该只有一个事件的读取或写入异步操作。

对于 reads您只需调用 async_read启动读取序列并在使用接收到的数据后从您的读取处理程序再次调用它。与您在单线程环境中所做的相同。

对于 writes如果有并发生产者(如果多个线程提供要写入套接字的数据),则需要一个并发队列(例如 boost circular buffer ,查找“有界缓冲区示例”)。您的 write 函数从此缓冲区获取数据并将其异步写入套接字。您的写入处理程序调用您的写入函数。

关于sockets - boost::asio 套接字 async_* 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872061/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com