C - 来自不稳定源的 fwrite()

C - fwrite() from volatile source

我有一些内存可以被协处理器修改。我已将指向它的指针标记为易失性,但如果我将该内存用作 fwrite 中的源,我是否必须担心 linux 缓存(内核推迟复制,直到协处理器更改该位置的数据) 或其他什么?

例如:

volatile My_Data_t* samples;
fwrite((void *) samples, 4, 1, fp);

简答为 "yes"。

volatile 不会为并发问题添加任何额外保护。这只是提示编译器不要在连续访问之间将内容缓存在寄存器中。

我不知道 My_Data_t 类型的布局,但您一次至少要写出四个。如果你说协处理器可以随时修改这个数组,那么很可能在 fwrite 调用期间,你的数组中的部分项目被修改了。

您的协处理器是否具有遵守 "lock" 机制的能力?这最终就是您所需要的。