sockets TCP boost.asio, operações assíncronas serão ordenados?
-
13-09-2019 - |
Pergunta
Se am am chamando boost :: asio :: async_write / async_read diretamente após o outro, os dados serão ordenados? Ou eu preciso esperar no retorno de chamada antes que eu estou chamando de leitura / gravação de novo?
Agradecemos antecipadamente!
Solução
Os dados não são garantidos para ser encomendados e se você estiver usando essas funções você deve esperar para o retorno de chamada antes de escrever novamente.
(Discussão em termos de async_write , também se aplica a async_read )
Como async_write é implementado em termos de várias chamadas para o fluxo subjacente async_write_some função, as chamadas não são atômicas. Cada chamada tentativas para gravar dados para o fluxo e tem um retorno de chamada interna para lidar com operações parciais, com efeito espera a conclusão de que você pode codificar-se. Então, você poderia facilmente acabar com dados mistos, se você não aguardar a conclusão.
Você também precisa considerar threads. Se você chamar async_x em um múltiplo fluxo de vezes que você pode acabar com operações simultâneas no mesmo fluxo subjacente em diferentes tópicos, levando a um comportamento indefinido.