小编Tha*_*han的帖子

程序计数器、栅栏和处理器重新排序

我知道除了编译器之外,处理器还可以重新排序指令。

我有几个问题想不通。

假设我们有三个指令:

节目单

S1 S2 S3

处理器重新排序后,顺序变为(无论出于何种原因):

S3 S2 S1

  • 那么当处理器执行 S1(按程序顺序)时,程序计数器的值是多少?
  • 如果 Windows(或其他操作系统),上下文将线程切换出并在另一个处理器中调度它,另一个处理器如何知道接下来要执行哪条指令?(是否保证进行相同的重新排序?)
  • 一个处理器上的内存栅栏(例如,由原子比较和交换指令创建的完整栅栏)在线程被调度到另一个线程上之后是否有效?

对此的任何想法都受到高度赞赏。

windows assembly x86-64 cpu-architecture memory-barriers

2
推荐指数
1
解决办法
60
查看次数