Я рассматриваю возможность внедрения асинхронного журналирования. Это означает, что несколько рабочих потоков создают сообщения в памяти и помещают их в очередь без блокировок, а один поток журналирования использует эту очередь и выполняет блокирующие операции ввода-вывода в фоновом режиме. Недостатком этого подхода является то, что если какой-либо рабочий поток выдает неперехваченное исключение, вызывается std::terminate, и поток протоколирования может не завершить свой вывод. Это очень нежелательно, поэтому мне нужно убедиться, что перед завершением программы очередь будет очищена и все операции ввода-вывода будут завершены. Для простоты я рассматриваю случай, когда сам логгер не может вызвать завершение, и это завершение не вызвано исключением из статических или локальных объектов потока, не вызвано уничтожением присоединяемого потока и т. д.
Что произойдет с другими потоками, если один поток выдаст неперехваченное исключение? Могу ли я передать управление другим потокам из std::terminate, заблокировать мьютекс или реализовать ожидание занятости? Мне нужно предотвратить добавление новых сообщений в очередь журналирования, позволяя регистратору очистить ее, а затем мне нужно дождаться завершения ввода-вывода: должен ли я занят ожиданием атомарного сообщения?
Подробнее здесь: https://stackoverflow.com/questions/790 ... dterminate
Грациозное завершение другого потока из std::terminate ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ошибка чтения входного потока при чтении потока WinSCP Session.GetFile из другого потока
Anonymous » » в форуме C# - 0 Ответы
- 68 Просмотры
-
Последнее сообщение Anonymous
-