我有一个关于记忆障碍的问题。
在多线程应用程序中,如果数据在它们之间共享,则必须使用内存屏障,因为在一个内核上运行的线程中的写可能不会被另一个内核上的另一个线程看到。
根据我从其他关于内存障碍的解释中所读到的,有人说,如果有一个线程处理某些数据,则不需要内存屏障。
这是我的问题:可能是线程修改了特定内核上的一些数据,然后调度程序决定将该线程迁移到另一个核心。
这个线程是否可能不会看到它在另一个核心上所做的修改?
发布于 2014-04-15 08:42:55
原则上:是的,如果程序执行从一个内核移动到另一个内核,它可能不会看到发生在前一个核心上的所有写操作。
不过,请记住,进程不会自行切换核心。是操作系统抢先执行并将线程移动到一个新的核心。因此,在执行上下文切换时,确保内存操作正确同步也是操作系统的责任。
对于程序员来说,这意味着,只要您不尝试在没有SMP感知操作系统的级别上工作(例如,当您试图编写自己的操作系统或在没有完全成熟的OS的嵌入式平台上工作时),您就不需要担心这种情况下的同步问题。
https://stackoverflow.com/questions/23078266
复制相似问题