Есть ли способ написать стандартный C, который предсказуемо обрабатывает сбои?
Предположим, у меня есть некоторый код, который работает с общей памятью, а также вызывает некоторые функции, которые могут привести к сбою программы. Авария зависит от платформы, но в основном она просто завершает процесс, когда происходит что-то плохое.
shared_memory_structure->field = 1;
function_that_might_crash();
Я хочу быть уверен, что все записи в общую память, которые в исходном коде предшествуют строке сбоя, на самом деле записываются в память до сбоя. Другими словами, компилятор ничего не переупорядочивает вокруг строки сбоя и ничего не кэширует в регистрах.
Есть ли хороший стандартный способ добиться этого?
volatile
может помочь. Также может помочь использование "барьера" для конкретного компилятора, но в Интернете есть примеры, демонстрирующие, что этого может быть недостаточно.