正在读取一个布尔原子以及它需要多少个周期

Is reading a bool atomic and how many cycles it takes

本文关键字:周期 多少 布尔原 读取 一个      更新时间:2023-10-16

读取布尔值是原子动作吗?

if (value != true)//here I'm reading bool, then I'm comparing it to the value I'm interested in.  

另外,读取它需要多少个处理器周期?

读取布尔值是原子作用吗?

C++标准不强制执行任何保证。

读取它需要多少个处理器周期?

这取决于处理器,也取决于从哪里读取(磁盘交换、主内存、缓存和寄存器)。

为了添加一个真实世界的例子,请考虑以下代码:

void f(bool x)
{
    if (x == true) x++;
}

如果使用 g++ -S 编译,则给出以下输出:

    .file   "test.c"
    .text
    .globl  _Z1fb
    .type   _Z1fb, @function
_Z1fb:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset 6, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register 6
    movl    %edi, %eax
    movb    %al, -4(%rbp)
    cmpb    $0, -4(%rbp)
    je  .L1
    movb    $1, -4(%rbp)
.L1:
    popq    %rbp
    .cfi_def_cfa 7, 8
    ret
    .cfi_endproc
.LFE0:
    .size   _Z1fb, .-_Z1fb
    .ident  "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
    .section    .note.GNU-stack,"",@progbits

如果在cmpb $0, -4(%rbp)指令之前,另一个线程更改了rbp的值,则比较的结果将是不确定的。