?
This document uses PHP Chinese website manual Release
在頭文件<stdatomic.h>中定義 | ||
---|---|---|
_Bool atomic_is_lock_free(const volatile A * obj); | (自C11以來) |
確定類型的所有對象A
(被指向的對象的類型)的原子操作是否obj
都是無鎖的。在任何給定的程序執(zhí)行中,調(diào)用的結(jié)果atomic_is_lock_free
對于相同類型的所有指針是相同的。
這是為所有原子對象類型定義的通用函數(shù)A
。該參數(shù)是指向易失性原子類型的指針,以接受非易失性和易失性(例如內(nèi)存映射I/O)原子變量的地址。
obj | - | 指向要檢查的原子對象的指針 |
---|
true
如果對類型的所有對象的操作A
都是無鎖的,否則false
。
正如已發(fā)布的C11所指出的那樣,該函數(shù)是按對象而不是按類型的。這由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標準(ISO/IEC 9899:2011):
7.17.5.1 atomic_is_lock_free通用函數(shù)(p: 280)
ATOMIC_BOOL_LOCK_FREEATOMIC_CHAR_LOCK_FREEATOMIC_CHAR16_T_LOCK_FREEATOMIC_CHAR32_T_LOCK_FREEATOMIC_WCHAR_T_LOCK_FREEATOMIC_SHORT_LOCK_FREEATOMIC_INT_LOCK_FREEATOMIC_LONG_LOCK_FREEATOMIC_LLONG_LOCK_FREEATOMIC_POINTER_LOCK_FREE (C11) | indicates that the given atomic type is lock-free (macro constant) |
---|
| 針對atomic_is_lock_free |的C ++文檔