读取布尔值是原子动作吗?
if (value != true)//here I'm reading bool, then I'm comparing it to the value I'm interested in.
另外,读取它需要多少个处理器周期?
读取布尔值是原子动作吗?
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
,则比较的结果将是未定义的。