我见过一些关于Linux内存障碍的文档。它提到了读记忆障碍和写记忆障碍。我很容易理解写记忆障碍的含义,我看不出读记忆障碍的必要性!
仅仅是为了保持内存区域的读取顺序吗?如果订单是相反的,我认为价值应该仍然是正确的,不是吗?
那么是读记忆障碍:读操作屏障读操作还是写操作屏障读操作?
把我弄糊涂了!
发布于 2014-03-05 18:36:21
读取内存屏障强制先读后读,然后再读完。例如,在内存映射的I/O中,从内存读取的数据实际上是从连接到系统的某个设备读取的数据。
MMIO读取需要按程序顺序执行,因为它们可能会对您正在读取的设备产生副作用。例如,如果设备是流数据,读取该值可能会导致设备用新值替换它。它还可能导致在不同的MMIO位置触发更改的操作。因此,必须对这两个位置的读取进行排序,因为结果取决于它们执行的顺序。
发布于 2014-03-06 15:26:08
即使是没有副作用的读物,有时也必须订购。请考虑以下成语:
extern some_flag_type message_is_ready_flag;
extern some message_type message_data;
while(message_is_ready_flag) // First read
continue;
... = message_data; // Second read假设其他线程将首先写入message_data,然后写到message_is_ready_flag。
如果在上面的代码中,第二次读取发生在第一次,它可能不会读取预期的值。请注意,写入线程需要使用相应的编写器屏障。这就是为什么Linux文档指出“阅读障碍通常应该与写障碍配对”的原因。
https://stackoverflow.com/questions/22204839
复制相似问题