我有一些协处理器可以修改的内存.我已将我的指针标记为volatile,但如果我将该内存用作fwrite中的源,我是否必须担心linux缓存(内核推迟复制,直到协处理器更改了该位置的数据)或其他任何内容?
例如:
volatile My_Data_t* samples;
fwrite((void *) samples, 4, 1, fp);
Run Code Online (Sandbox Code Playgroud)
简短的回答是"是".
volatile不会对并发问题添加任何额外的保护.它只是提示编译器不要在连续访问之间将内容缓存在寄存器中.
我不知道某种My_Data_t类型的布局,但你一次只写出其中至少四种.如果你说协处理器可以随时修改这个数组,很可能在fwrite调用期间,修改了数组中项目的一个子集.
您的协处理器是否具有尊重"锁定"机制的能力?这最终是你所需要的.