名前空間
変種
操作

atomic_is_lock_free

提供: cppreference.com
< c‎ | atomic
ヘッダ <stdatomic.h> で定義
_Bool atomic_is_lock_free( const volatile A* obj );
(C11以上)

A (obj の指すオブジェクトの型) のすべてのオブジェクトに対するアトミック操作がロックフリーかどうか調べます。 プログラムの特定の実行において、 atomic_is_lock_free の呼び出しの結果は同じ型のすべてのポインタに対して同じになります。

これはすべてのアトミックオブジェクト型 A に対して定義される総称関数です。 引数は非 volatile と volatile (メモリマップド I/O など) 両方のアトミック変数のアドレスを受理するための volatile アトミック型へのポインタです。


目次

[編集] 引数

obj - 調べるアトミックオブジェクトを指すポインタ

[編集] 戻り値

A 型のすべてのオブジェクトに対して操作がロックフリーであれば true、そうでなければ false

[編集] ノート

C11 の発行当時、この関数は型ごとではなくオブジェクトごとでした。 これは DR 465 で訂正されました。

[編集]

#include <stdio.h>
#include <stdatomic.h>
 
_Atomic struct A { int a[100]; } a;
_Atomic struct B { int x, y; } b;
int main(void)
{
    printf("_Atomic struct A is lock free? %s\n", 
            atomic_is_lock_free(&a) ? "true" : "false");
    printf("_Atomic struct B is lock free? %s\n", 
            atomic_is_lock_free(&b) ? "true" : "false");
}

出力例:

_Atomic struct A is lock free? false
_Atomic struct B is lock free? true

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.17.5.1 The atomic_is_lock_free generic function (p: 280)

[編集] 関連項目

特定のアトミック型がロックフリーかどうかを表します
(マクロ定数) [edit]
atomic_is_lock_freeC++リファレンス