std:: atomic_wait, std:: atomic_wait_explicit
|
Определено в заголовочном файле
<atomic>
|
||
|
template
<
class
T
>
void
atomic_wait
(
const
std::
atomic
<
T
>
*
object,
|
(1) | (начиная с C++20) |
|
template
<
class
T
>
void
atomic_wait
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(2) | (начиная с C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
std::
atomic
<
T
>
*
object,
|
(3) | (начиная с C++20) |
|
template
<
class
T
>
void
atomic_wait_explicit
(
const
volatile
std::
atomic
<
T
>
*
object,
|
(4) | (начиная с C++20) |
Выполняет атомарные операции ожидания. Ведут себя так, как будто многократно выполняются следующие шаги:
-
Сравните
представление значения
объекта
object
-
>
load
(
)
(для перегрузок
(1,2)
) или
object
-
>
load
(
order
)
(для перегрузок
(3,4)
) с представлением
old
.
- Если они побитово равны, то блокируется до тех пор, пока * object не будет уведомлен с помощью std::atomic::notify_one() или std::atomic::notify_all() , или пока поток не будет разблокирован ложно.
- В противном случае возвращает управление.
Эти функции гарантированно возвращают управление только при изменении значения, даже если базовая реализация разблокируется ложно.
Содержание |
Параметры
| object | - | указатель на атомарный объект для проверки и ожидания |
| old | - | значение, которое проверяется на отсутствие в атомарном объекте |
| order | - | порядок синхронизации памяти |
Возвращаемое значение
(нет)
Примечания
Эта форма обнаружения изменений часто более эффективна, чем простое опрашивание или чистые спинлоки.
Из-за проблемы ABA , временные изменения с old на другое значение и обратно на old могут быть пропущены и не разблокировать.
Сравнение производится побитово (аналогично std::memcmp ); операторы сравнения не используются. Биты заполнения, которые никогда не участвуют в представлении значения объекта, игнорируются.
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++20)
|
блокирует поток до получения уведомления и изменения атомарного значения
(публичная функция-член
std::atomic<T>
)
|
|
(C++20)
|
уведомляет как минимум один поток, ожидающий атомарный объект
(публичная функция-член
std::atomic<T>
)
|
|
(C++20)
|
уведомляет все потоки, заблокированные в ожидании атомарного объекта
(публичная функция-член
std::atomic<T>
)
|
|
(C++20)
|
уведомляет поток, заблокированный в atomic_wait
(шаблон функции) |
|
(C++20)
|
уведомляет все потоки, заблокированные в atomic_wait
(шаблон функции) |