【问题标题】:Memory barrier in a single thread单线程内存屏障
【发布时间】:2014-05-29 11:39:24
【问题描述】:

我有这个与记忆障碍有关的问题。

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

根据我从其他关于内存屏障的解释中读到的内容,据说如果您有一个处理某些数据的单线程,则不需要内存屏障。

这是我的问题:可能是某个线程修改了特定内核上的某些数据,然后在一段时间后调度程序决定将该线程迁移到另一个内核。

这个线程有没有可能在另一个内核上看不到它的修改?

【问题讨论】:

    标签: multithreading multiprocessing


    【解决方案1】:

    原则上:是的,如果程序执行从一个内核移动到下一个内核,它可能不会看到前一个内核上发生的所有写入。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2021-03-19
      • 2015-04-01
      • 2014-02-04
      相关资源
      最近更新 更多