假设我有一些可用于共享内存的代码,并且还调用了一些可能会使程序崩溃的函数。崩溃是特定于平台的,但基本上它只是在发生不良情况时才终止该过程。
shared_memory_structure->field = 1;
function_that_might_crash();
我想确保所有在崩溃行之前在源代码中对共享内存的写操作实际上都在崩溃前被写到内存中。换句话说,编译器不会在崩溃行周围重新排序,也不会在寄存器中缓存任何内容。
有没有很好的标准方法来实现这一目标?
volatile
可能会有所帮助。使用特定于编译器的“屏障”也可能有所帮助,但是网络上有一些示例表明这可能还不够