Грациозное завершение другого потока из std::terminateC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Грациозное завершение другого потока из std::terminate

Сообщение Anonymous »

Я рассматриваю возможность внедрения асинхронного журналирования. Это означает, что несколько рабочих потоков создают сообщения в памяти и помещают их в очередь без блокировок, а один поток журналирования использует эту очередь и выполняет блокирующие операции ввода-вывода в фоновом режиме. Недостатком этого подхода является то, что если какой-либо рабочий поток выдает неперехваченное исключение, вызывается std::terminate, и поток протоколирования может не завершить свой вывод. Это очень нежелательно, поэтому мне нужно убедиться, что перед завершением программы очередь будет очищена и все операции ввода-вывода будут завершены. Для простоты я рассматриваю случай, когда сам логгер не может вызвать завершение, и это завершение не вызвано исключением из статических или локальных объектов потока, не вызвано уничтожением присоединяемого потока и т. д.
Что произойдет с другими потоками, если один поток выдаст неперехваченное исключение? Могу ли я передать управление другим потокам из std::terminate, заблокировать мьютекс или реализовать ожидание занятости? Мне нужно предотвратить добавление новых сообщений в очередь журналирования, позволяя регистратору очистить ее, а затем мне нужно дождаться завершения ввода-вывода: должен ли я занят ожиданием атомарного сообщения?

Подробнее здесь: https://stackoverflow.com/questions/790 ... dterminate
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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