我是一个加速C++的新手,并用它来写一个类似服务器的应用程序,我想知道是否有可能同时使用boost::asio::ip::tcp::socket::async_read_some(...)
和boost::asio::ip::tcp::socket::write_some(...)
。使用boost ::短耳插座异步和同步操作一起
我的方案的Connection对象通过持续监听:
void Connection::doRead()
{
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_rx_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
afterReading(length);
doRead();
}
});
}
同时,异步回调函数(在不同的线程中运行)可以调用socket_.read_write
而连接是“阅读”。
我已经阅读过各种Boost :: Asio文档,但是这种情况从未涉及。
这是允许的吗?如果不是,应该怎么做才能避免它?
编辑:
我已阅读,所建议的,各种答案包括这样:Why do I need strand per connection when using boost::asio?,但因为它是不是阉混合异步和同步(通过不同的线程调用)规定仍然无法找到答案要求是安全与否。
This [answer](http://stackoverflow.com/a/12801042/1053968)可能会有所帮助。 –
@TannerSansbury是正确的,而且这可能只是作为一个副本被关闭。你需要使用股票,当客户端没有在听时,写入客户端肯定没有任何意义,但是写作很繁忙。 –
可能的重复[为什么我需要链每个连接时使用boost :: asio?](http://stackoverflow.com/questions/12794107/why-do-need-strand-per-connection-when-using -boostasio) –