gpt4 book ai didi

c++ - HTTP Server 3 示例中跨线程的 boost::asio 套接字共享

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:21 32 4
gpt4 key购买 nike

我引用了 boost::asio HTTP Server 3 示例的连接类中的代码 http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/example/http/server3/connection.cpp

可以看出,每个异步操作都是在 boost::asio::io_service::strand 上调用的。这确保不会同时调用完成处理程序。但是,示例服务器可以运行多个调用 io_service::run 的线程,这意味着这些线程中的任何一个都可以用来调用处理程序。此示例中的所有处理程序都调用 boost::asio::ip::tcp::socket 对象上的方法。对我来说,这是在线程之间共享套接字对象(尽管不是同时调用它的方法)。

我看不到套接字调用没有同步,所以我的问题是有什么机制可以确保每个线程都具有相同的套接字对象状态 View ?文档明确指出共享 boost::asio::ip::tcp::socket 实例是不安全的。

最佳答案

文档指出 tcp::socket 作为共享对象不是线程安全

我使用广泛接受的 SGI STL线程安全的定义,即:

The SGI implementation of STL is thread-safe only in the sense that simultaneous accesses to distinct containers are safe, and simultaneous read accesses to shared containers are safe. If multiple threads access a single container, and at least one thread may potentially write, then the user is responsible for ensuring mutual exclusion between the threads during the container accesses.

关键词是同时。因此,只要访问不是并发的,就可以使用多个线程来访问共享对象。顺便说一句,这仅在一个或多个线程正在写入共享对象时才重要。

socket对象的状态在进程的内存空间中,线程间共享,不能不一致。

希望这能回答您的问题!

关于c++ - HTTP Server 3 示例中跨线程的 boost::asio 套接字共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903358/

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