名稱空間
變體
操作

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 和 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