我有这个与记忆障碍有关的问题。
在多线程应用程序中,如果数据在它们之间共享,则必须使用内存屏障,因为在一个核心上运行的线程中的写入可能不会被另一个核心上的另一个线程看到。
根据我从内存障碍的其他解释中读到的内容,据说如果你有一个单独的线程处理某些数据,你就不需要内存屏障。
这是我的问题:可能是某个线程修改了特定核心上的某些数据,然后一段时间后,调度程序决定将该线程迁移到另一个核心。
该线程是否可能无法在其他核心上看到其修改?
答案 0 :(得分:2)
原则上:是的,如果程序执行从一个核心移动到下一个核心,它可能看不到在前一个核心上发生的所有写入。
请注意,虽然流程不会自行切换核心。 操作系统是抢占执行并将线程移动到新核心的。因此,在执行上下文切换时,确保内存操作正确同步也是操作系统的责任。
对于您作为程序员而言,这意味着,只要您没有在没有SMP感知操作系统的级别上进行工作(例如,当您尝试编写自己的操作系统或处理嵌入式操作系统时)没有完全成熟的操作系统的平台),你不必担心这种情况下的同步问题。