В этом ответе SO я прочитал, что несколько частей внутреннего устройства asio имеют блокировки.
Кроме того, я знаю, что asio спроектирован таким образом, чтобы несколько потоков могли обслуживать один io_context.
Однако, если у меня есть только один поток, обслуживающий один io_context, но я хочу иметь более одного io_context в моем приложение, безопасно ли отключать потоки (согласно BOOST_ASIO_DISABLE_THREADS)
То есть: у меня есть один io_context и один поток, который вошел в свой цикл io_context::run(), и он обслуживает несколько сокетов и т. д. Все взаимодействие с этими сокетами выполняется в контексте этого потока.
У меня также есть еще один поток и еще один io_context и эти службы потоков, которые io_context и его сокеты и т. д.
Межпотоковая связь достигается с использованием специальной потокобезопасной очереди и eventfd, обернутого asio::posix::stream_descriptor, который записывается инициирующим потоком и считывается из принимающего потока, который затем извлекает элементы из потокобезопасной очереди.
Поэтому ни в коем случае не будет пользовательского кода, который пытается вызвать функции asio из потока, который не связан с io_context, обслуживающим его asio-объекты.
Принимая во внимание приведенный выше вариант использования, безопасно ли отключать потоки в asio?
Подробнее здесь: https://stackoverflow.com/questions/722 ... ed-program
Безопасно ли отключать потоки boost::asio в многопоточной программе? ⇐ C++
Программы на C++. Форум разработчиков
1765404389
Anonymous
В этом ответе SO я прочитал, что несколько частей внутреннего устройства asio имеют блокировки.
Кроме того, я знаю, что asio спроектирован таким образом, чтобы несколько потоков могли обслуживать один io_context.
Однако, если у меня есть только один поток, обслуживающий один io_context, [b]но[/b] я хочу иметь более одного io_context в моем приложение, безопасно ли отключать потоки (согласно BOOST_ASIO_DISABLE_THREADS)
То есть: у меня есть один io_context и один поток, который вошел в свой цикл io_context::run(), и он обслуживает несколько сокетов и т. д. Все взаимодействие с этими сокетами выполняется в контексте этого потока.
У меня также есть еще один поток и еще один io_context и эти службы потоков, которые io_context и его сокеты и т. д.
Межпотоковая связь достигается с использованием специальной потокобезопасной очереди и eventfd, обернутого asio::posix::stream_descriptor, который записывается инициирующим потоком и считывается из принимающего потока, который затем извлекает элементы из потокобезопасной очереди.
Поэтому ни в коем случае не будет пользовательского кода, который пытается вызвать функции asio из потока, который не связан с io_context, обслуживающим его asio-объекты.
Принимая во внимание приведенный выше вариант использования, безопасно ли отключать потоки в asio?
Подробнее здесь: [url]https://stackoverflow.com/questions/72286758/is-it-safe-to-disable-threads-on-boostasio-in-a-multi-threaded-program[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия