atomic_is_lock_free
|
ヘッダーで定義
<stdatomic.h>
|
||
|
_Bool atomic_is_lock_free
(
const
volatile
A
*
obj
)
;
|
(C11以降) | |
型
A
(
obj
が指すオブジェクトの型)の全てのオブジェクトに対するアトミック操作がロックフリーかどうかを判定します。任意のプログラム実行において、同じ型の全てのポインタに対して
atomic_is_lock_free
を呼び出した結果は同じになります。
これはすべての
generic function
に対して定義された
atomic object types
A
です。引数はvolatile atomic型へのポインタであり、非volatileと
volatile
(例:メモリマップドI/O)atomicオブジェクトの両方のアドレスを受け入れます。また、volatile atomicオブジェクトにこの操作を適用する際にはvolatileセマンティクスが保持されます。
ジェネリック関数の名前がマクロであるか、外部リンケージで宣言された識別子であるかは未規定です。実際の関数にアクセスするために(例えば括弧で囲んで ( atomic_is_lock_free ) ( ... ) のように)マクロ定義を抑制した場合、またはプログラムがジェネリック関数の名前で外部識別子を定義した場合、動作は未定義です。
目次 |
パラメータ
| obj | - | 検査対象のアトミックオブジェクトへのポインタ |
戻り値
true
型
A
のすべてのオブジェクトに対する操作がロックフリーである場合、
false
それ以外の場合。
例
#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
不具合報告
以下の動作変更に関する不具合報告は、以前に公開されたC規格に対して遡及的に適用されました。
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| DR 465 | C11 | この関数はオブジェクト単位であった | この関数は型単位である |
参考文献
- C17規格 (ISO/IEC 9899:2018):
-
- 7.17.5.1 atomic_is_lock_free ジェネリック関数 (p: 205)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.17.5.1 atomic_is_lock_free汎用関数 (p: 280)
関連項目
|
指定されたアトミック型がロックフリーであることを示す
(マクロ定数) |
|
|
C++ documentation
for
atomic_is_lock_free
|
|