2015-02-06 17 views
5

Si supponga che un servizio async_read_some sia stato abilitato su un socket in boost :: asio, cosa succederà se viene chiamata una lettura di blocco sullo stesso socket?Lettura simultanea e async_read_some in boost asio

Un pezzo di pseudo codice si presenta come:

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 

Il mio test ingenuo mostra che il blocco leggere sempre avere la priorità: i dati in primo luogo riempire la bBuffer prima che il callback asincrono chiamato. È un comportamento desiderato dalla mia parte.

Domanda: È un comportamento garantito? Su tutti i tipi di socket?

risposta

2

Boost.Asio non garantisce questa garanzia su alcun oggetto I/O. Quando viene avviata un'operazione sincrona su un oggetto I/O con un'operazione asincrona in sospeso dello stesso tipo, l'ordine in cui si verificano le chiamate di sistema sottostanti non è specificato.

Problemi correlati