从文档中,大多数Asio类都不是线程安全的。所以我想知道用户线程在异步操作中访问对象是否安全?
例如,如果套接字是异步连接:
asio::async_connect(socket, endpoint_iterator, handler);
我想会有一个Asio内部线程(例如一个运行io_service.run()
)来对socket
执行某些操作(否?)。在socket.close()
完成之前调用async_connect
是否安全(例如超时)?它会与任何Asio内部线程竞争吗?
答案 0 :(得分:1)
Asio完全隐藏了系统相关的线程(pthreads,windows线程)。 处理代码的哪个线程无关紧要,ioservice有什么关系。
所有人都没有执行异步代码,请不要调用ioservice.run()。
我希望这有一些帮助。