atomic_is_lock_free
|
Определено в заголовочном файле
<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 | - | указатель на атомарный объект для проверки |
Возвращаемое значение
true
если операции со всеми объектами типа
A
являются lock-free,
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 (стр: 205)
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.17.5.1 Универсальная функция atomic_is_lock_free (стр: 280)
Смотрите также
|
указывает, что данный атомарный тип является свободным от блокировок
(макроконстанта) |
|
|
Документация C++
для
atomic_is_lock_free
|
|