Đọc tài liệu về boost :: asio, vẫn chưa rõ khi nào tôi cần sử dụng asio :: strand. Giả sử rằng tôi có một chủ đề bằng cách sử dụng io_service là nó sau đó an toàn để viết trên một ổ cắm như sau?Khi nào tôi phải sử dụng boost :: asio: strand
void Connection::write(boost::shared_ptr<string> msg)
{
_io_service.post(boost::bind(&Connection::_do_write,this,msg));
}
void Connection::_do_write(boost::shared_ptr<string> msg)
{
if(_write_in_progress)
{
_msg_queue.push_back(msg);
}
else
{
_write_in_progress=true;
boost::asio::async_write(_socket, boost::asio::buffer(*(msg.get())),
boost::bind(&Connection::_handle_write,this,
boost::asio::placeholders::error));
}
}
void Connection::_handle_write(boost::system::error_code const &error)
{
if(!error)
{
if(!_msg_queue.empty())
{
boost::shared_ptr<string> msg=_msg_queue.front();
_msg_queue.pop_front();
boost::asio::async_write(_socket, boost::asio::buffer(*(msg.get())),
boost::bind(&Connection::_handle_write,this,
boost::asio::placeholders::error));
}
else
{
_write_in_progress=false;
}
}
}
Trường hợp nhiều chủ đề gọi Connection :: write (..) hoặc tôi có phải sử dụng asio :: strand không?