Есть ли способ написать стандартный C, который предсказуемо обрабатывает сбои?

Предположим, у меня есть некоторый код, который работает с общей памятью, а также вызывает некоторые функции, которые могут привести к сбою программы. Авария зависит от платформы, но в основном она просто завершает процесс, когда происходит что-то плохое.

shared_memory_structure->field = 1;
function_that_might_crash();

Я хочу быть уверен, что все записи в общую память, которые в исходном коде предшествуют строке сбоя, на самом деле записываются в память до сбоя. Другими словами, компилятор ничего не переупорядочивает вокруг строки сбоя и ничего не кэширует в регистрах.

Есть ли хороший стандартный способ добиться этого?

volatile может помочь. Также может помочь использование "барьера" для конкретного компилятора, но в Интернете есть примеры, демонстрирующие, что этого может быть недостаточно.

0 ответов

Другие вопросы по тегам