-3

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

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

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

4

2 回答 2

5

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

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

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

这取决于处理器,并且取决于从何处读取数据(磁盘交换与主内存与高速缓存与寄存器)。

于 2012-06-16T17:23:48.603 回答
1

只需添加一个真实世界的示例,请考虑以下代码:

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,则比较的结果将是未定义的。

于 2012-06-16T17:53:05.180 回答