Как сказал Сэм Миллер, ваши предположения вполне верны.
Однако я хотел бы указать на проблему, которую вы, возможно, не заметили.
Правильно, что нити будут сериализовать async_write(s) и, следовательно, там будет потокобезопасным.Но проблема не в этом, async_write является поточно-безопасным, если не используется в одном сокете.И пряди здесь не помогут, так как вы не должны чередовать async_write в том же сокете.
Strands не будет ждать завершения предыдущего async_write перед вызовом следующего.вам нужно будет создать структуру async_write только в том случае, если ни одна из них уже не работает в сокете.