Безопасно ли отключать потоки boost::asio в многопоточной программе?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Безопасно ли отключать потоки boost::asio в многопоточной программе?

Сообщение Anonymous »

В этом ответе 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»