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 (например, памяти с прямым доступом) атомных объектов, и семантика volatile сохраняется при применении этой операции к 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 | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| 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)
См. также
|
(C11) | указывает, что данный атомный тип без блокировки (макроконстанта) |
Документация C++ для atomic_is_lock_free |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/atomic/atomic_is_lock_free