2014-04-15 28 views
2

我有这个问题涉及内存障碍。单线程内存屏障

在多线程应用程序中,如果在它们之间共享数据,则必须使用内存屏障,因为在一个内核上运行的线程中的写入可能不会被另一个内核上的另一个线程看到。

从我从记忆障碍,其他的解释看,有人说,如果你有一个单独的线程与一些数据的工作,你并不需要一个内存屏障。

这里是我的问题:它可能是一个线程修改对特定核心的一些数据,然后经过一段时间的调度程序决定该线程迁移到另一个核心的情况。

是否有可能,这个线程不会看到在另一个芯上做了修改?

回答

2

原则:是的,如果程序执行从一个核心移动到下一个,它可能无法看到,以前的核心发生的所有写操作。

请记住,虽然进程不会自行切换核心。它是操作系统抢占执行并将线程移动到一个新的核心。因此,在执行上下文切换时,确保内存操作正确同步也是操作系统的责任。

对于作为程序员的你来说,这意味着只要你没有尝试在没有SMP感知的操作系统的级别上工作(例如,当你试图编写自己的操作系统或者在工作时嵌入式平台没有完整的操作系统),您无需担心这种情况下的同步问题。