Question

Si vous appelle am boost :: asio :: async_write / async_read directement après l'autre, les données seront commandé? Ou dois-je attendre le rappel avant que je fais appel écriture / lecture à nouveau?

Merci d'avance!

Était-ce utile?

La solution

Les données ne sont pas garanties à commander et si vous utilisez ces fonctions vous devez attendre le rappel avant d'écrire à nouveau.

(Discussion en termes de async_write , applique également à async_read )

Comme async_write est mis en œuvre en termes de multiples appels au flux sous-jacent de async_write_some fonction, ces appels ne sont pas atomiques. Chaque appel tente d'écrire des données dans le flux et a un rappel interne pour faire face à des opérations partielles, en effet attendre la fin que vous pourriez vous code. Donc, vous pourriez facilement vous retrouver avec des données mixtes si vous ne voulez pas attendre la fin.

Vous devez également considérer les discussions. Si vous appelez async_x sur un flux plusieurs fois vous pourriez vous retrouver avec des opérations simultanées sur le même flux sous-jacent dans différents threads, ce qui conduit à un comportement non défini.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top