The documentation for boost::asio::ssl::stream состояния следующая относительно безопасность резьбы:Выполнение асинхронных операций в пределах одной и те же цепей
Потокобезопасности
отчетливых объектов: Безопасная.
Общие объекты: Небезопасные. Приложение также должно гарантировать, что все асинхронные операции выполняются в пределах одной и той же неявной или явной строки.
Если я сравнить это с documentation for the boost::asio::ip::tcp::socket type, тем утверждением о прядях не входят.
Вопросы
Если доступ к объекту потока контролируется с помощью взаимной блокировки, убедившись, что только один поток работает на потоке Ssl в данный момент времени, что потребность в использовании неявного/явного прядь ?
Кроме того, что означает «асинхронные операции» в этом контексте? Является ли документ ссылкой на вызовы, например, boost :: asio :: async_read/boost :: asio :: async_read, или на обратные вызовы обработчика, которые я передаю этим операциям?
Если нет необходимости, можете ли вы понять, почему в документе указано использование нитей? Другие части документов просто указывают, что общие объекты небезопасны, и все. Вы говорите, что запуск асинхронных операций с обработчиками завершения невозможен. Почему это? Я попробовал, и у меня не было никаких проблем. – Nitramk
Нет необходимости в документации, поскольку это всего лишь стандартная спецификация C++. Если вы синхронизируете доступ, вам не нужна гонка данных, поэтому вы вообще не столкнетесь с проблемой безопасности потоков. Тот факт, что документация иногда намекает на существование «прядей» для этой цели, - это просто дружеский жест для пользователей библиотеки. Это может быть довольно сложно узнать о нитях и о том, для чего они полезны, без таких намеков. Фактически, человек мог бы задаться вопросом, как на земле они могут с пользой работать с boost asio в многопоточной среде, за исключением того, что добавляются тонны блокировки везде. – sehe
Boost Asio ориентирован на асинхронные реакторные конструкции, где количество операций не " t шкала с потоками; это связано с тем, что для этого требуются высокопроизводительные серверы (потоки и блокировка просто снижают производительность). Таким образом, люди, читающие документацию, с удовольствием узнают, что Boost Asio может выполнить необходимую синхронизацию, используя понятие нити – sehe