gpt4 book ai didi

multithreading - 多线程意义上的机器指令假设

转载 作者:行者123 更新时间:2023-12-03 12:53:00 25 4
gpt4 key购买 nike

我可以假定每个指令都遵循原子性吗?例如,

mov dword ptr [eax], 0

运动要么成功移动,要么不发生。在执行的指令中间没有中断。

我的假设正确吗?

我知道当前的处理器可以乱序执行指令,并且编译会在优化方面生成乱码。因此,将按照与我编写的顺序不同的顺序执行运动。但这无关紧要,我关心的是一旦执行了 单指令,就不能中断它。

编辑:
我关心的是 的原子性,即任何单个指令,而不是特殊指令或读写指令的分支,例如,我仅使用mov。
  • 每当处理器的任何核心执行一条指令(加,移动,移位等)时,
    可以中断执行吗?
  • 寄存器或内存中是否有不确定的状态(机器字大小)。

  • 或硬件可以提供原子性的最小单元是什么?

    最佳答案

    不。通常,您不应该假设指令是原子的。关于用常量加载寄存器,为什么仍然如此呢?您是在问寄存器是否可以以不确定状态结束吗?答案是否定的,否则中断将不起作用。从在同一内核上运行的程序的角度来看,该寄存器将被加载还是不被加载。

    x86中的LOCK前缀用于确保原子性。

    编辑:问题已被编辑以显示将常量存储到内存中。
    我的回答通常还是不。在某些情况下,如果内存对齐,CPU会保证这是原子的,但我不会依赖它,因为它可能会给您带来麻烦。

    另请参阅此处:
    Read/Write an int on x86 machine without lock

    关于multithreading - 多线程意义上的机器指令假设,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5616068/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com