bool の読み取りはアトミック アクションですか?
if (value != true)//here I'm reading bool, then I'm comparing it to the value I'm interested in.
また、それを読み取るのに何プロセッササイクルかかりますか?
bool の読み取りはアトミック アクションですか?
if (value != true)//here I'm reading bool, then I'm comparing it to the value I'm interested in.
また、それを読み取るのに何プロセッササイクルかかりますか?
bool の読み取りはアトミック アクションですか?
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
、比較の結果は未定義になります。