正在读取一个布尔原子以及它需要多少个周期
Is reading a bool atomic and how many cycles it takes
读取布尔值是原子动作吗?
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
的值,则比较的结果将是不确定的。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 传递给 std::runtime_error 的 ctor 的字符串对象的生命周期是多少?
- 确定一个码块需要多少个时钟周期
- 正在读取一个布尔原子以及它需要多少个周期
- c++ lambda表达式的生命周期是多少?
- 在现代x86_64 CPU上进行AVX/SSE幂运算需要多少时钟周期?
- const引用右值的类数据成员的生命周期是多少?
- c++数据结构对象的生命周期是多少?