У меня возникла проблема безопасности исключений для функции WinAPI InitOnceExecuteOnce. Всякий раз, когда выдается исключение из функции обратного вызова, возникает тупик. Callback возвращает логический флаг, сообщающий вызывающей стороне, были ли данные успешно инициализированы, но если я верну false, я не смогу перебросить исключение, это не хорошо. Я пытался решить проблему таким образом.
try
{
InitOnceExecuteOnce(&flag, init_once_handler, &arguments, 0);
} catch (...)
{
InitOnceInitialize(&flag);
throw;
}
Всякий раз, когда я ловлю исключение из функции, я снова инициирую структуру и перебрасываю исключение, чтобы другие потоки находили данные не инициализированными, поскольку флаг находится в исходном состоянии. Однако иногда он также блокируется, возможно, из-за того, что другой поток начал ожидать объект синхронизации, прежде чем первый перехватит исключение и снова инициализирует флаг. Есть ли решение этой проблемы?
Заранее спасибо.