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" 机制的能力?这最终就是您所需要的。
我有一些内存可以被协处理器修改。我已将指向它的指针标记为易失性,但如果我将该内存用作 fwrite 中的源,我是否必须担心 linux 缓存(内核推迟复制,直到协处理器更改该位置的数据) 或其他什么?
例如:
volatile My_Data_t* samples;
fwrite((void *) samples, 4, 1, fp);
简答为 "yes"。
volatile
不会为并发问题添加任何额外保护。这只是提示编译器不要在连续访问之间将内容缓存在寄存器中。
我不知道 My_Data_t
类型的布局,但您一次至少要写出四个。如果你说协处理器可以随时修改这个数组,那么很可能在 fwrite 调用期间,你的数组中的部分项目被修改了。
您的协处理器是否具有遵守 "lock" 机制的能力?这最终就是您所需要的。