2015-02-06 20 views
5

Załóżmy, że usługa async_read_some została włączona w gnieździe w boost :: asio, co się stanie, jeśli zostanie wywołany blokujący odczyt w tym samym gnieździe?Równoczesne czytanie i async_read_some w boost asio

kawałek pseudo kod wygląda następująco:

using boost::asio::local::stream_protocol; 

boost::asio::io_service io; 

stream_protocol::socket s(io); 
s.connect(stream_protocol::endpoint(address)); 

s.async_read_some(aBuffer, aCallback); // start async_read 

boost::thread thread(boost::bind(&boost::asio::io_service::run, &io)); 

usleep(1000000); // do some stuff  

boost::asio::read(bBuffer); // request a blocking read 

Mój naiwny badanie pokazuje, że blokowanie czytać zawsze pierwszeństwo: dane najpierw wypełnić bBuffer przed zwrotna asynchroniczny miano. To pożądane zachowanie po mojej stronie.

Pytanie: Jest to zachowanie gwarantowane? Na wszystkich typach gniazd?

Odpowiedz

2

Boost.Asio nie udziela gwarancji na żadnym obiekcie I/O. Gdy operacja synchroniczna jest inicjowana na obiekcie we/wy, który ma wyjątkowe działanie asynchroniczne tego samego typu, kolejność, w jakiej występują wywołania systemowe, jest nieokreślona.

Powiązane problemy