atomic_is_lock_free
來自 cppreference.com
在標頭檔案 <stdatomic.h> 中定義 |
||
_Bool atomic_is_lock_free( const volatile A* obj ); |
(C11 起) | |
確定型別為 A
(由 obj
指向的物件的型別)的所有物件的原子操作是否是無鎖的。在任何給定的程式執行中,對於相同型別的所有指標,呼叫 atomic_is_lock_free
的結果是相同的。
這是一個針對所有原子物件型別 A
定義的泛型函式。引數是指向 volatile 原子型別的指標,以接受非 volatile 和 volatile(例如記憶體對映 I/O)原子物件的地址,並且當將此操作應用於 volatile 原子物件時,volatile 語義得以保留。
泛型函式的名稱是宏還是具有外部連結的識別符號是未指定的。如果為了訪問實際函式而抑制宏定義(例如用括號括起來,如 (atomic_is_lock_free)(...)),或者程式定義了一個與泛型函式同名的外部識別符號,則行為是未定義的。
目錄 |
[編輯部分:引數] 引數
obj | - | 指向要檢查的原子物件的指標 |
[編輯部分:返回值] 返回值
如果型別 A
的所有物件上的操作都是無鎖的,則為 true,否則為 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 465 | C11 | 此函式是按物件進行的 | 此函式是按型別進行的 |
[編輯部分:參考資料] 參考資料
- C17 標準 (ISO/IEC 9899:2018)
- 7.17.5.1 The atomic_is_lock_free generic function (p: 205)
- C11 標準 (ISO/IEC 9899:2011)
- 7.17.5.1 The atomic_is_lock_free generic function (p: 280)
[編輯部分:另請參閱] 另請參閱
指示給定的原子型別是否是無鎖的 (宏常量) | |
C++ 文件 for atomic_is_lock_free
|