首页 文章
  • 4 votes
     answers
     views

    x86 CPU是否重新排序指令?

    我已经读过一些CPU重新排序指令,但这对于单线程程序来说不是问题(指令仍会在单线程程序中重新排序,但看起来好像指令是按顺序执行的),这只是一个问题用于多线程程序 . 为了解决指令重新排序的问题,我们可以在代码中的适当位置插入内存屏障 . 但x86 CPU是否重新排序指令?如果没有,那么就没有必要使用内存屏障了吧?
  • 7 votes
     answers
     views

    lock xchg与mfence具有相同的行为吗?

    我想知道的是,如果 lock xchg 与一个线程访问一个正在被其他线程进行变异的内存位置(我们只是随机说)的角度,它将具有与 mfence 类似的行为 . 它能保证我获得最新的 Value 吗?之后的内存读/写指令? 我混淆的原因是: 8.2.2“读取或写入不能使用I / O指令,锁定指令或序列化指令进行重新排序 . ” - 英特尔64开发人员手册卷 . 3 这是否适用于线程? mfenc...
  • 5 votes
     answers
     views

    假设没有非时间指令,`xchg`是否包含`mfence`?

    我已经看过this answer和this answer,但是在没有非时间指令的假设下,似乎都没有清楚明确地说明 mfence 和 xchg 的等价或非等价 . 英特尔instruction reference for xchg 提到该指令对于实现用于进程同步的信号量或类似数据结构非常有用,并且进一步引用了Volume 3A的第8章 . 该参考文献陈述如下 . 对于P6系列处理器,锁定操作会序...
  • 26 votes
     answers
     views

    内存模型的排序和可见性?

    我试着寻找有关这方面的细节,我甚至阅读了关于互斥和原子的标准......但我仍然无法理解C 11内存模型的可见性保证 . 据我所知,互斥BESIDE互斥的一个非常重要的特点是确保可见性 . Aka每次只有一个线程增加计数器是不够的,重要的是线程增加了最后使用互斥锁的线程所存储的计数器(我真的不知道为什么人们在讨论时不再提这个互斥,也许我有坏老师:)) . 所以从我可以告诉原子并不强制立即可见性:...

热门问题