-3

bool の読み取りはアトミック アクションですか?

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

また、それを読み取るのに何プロセッササイクルかかりますか?

4

2 に答える 2

5

bool の読み取りはアトミック アクションですか?

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 に答える