std:: atomic_... <std::shared_ptr>
|
Определено в заголовке
<memory>
|
||
|
template
<
class
T
>
bool atomic_is_lock_free ( const std:: shared_ptr < T > * p ) ; |
(1) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
std:: shared_ptr < T > atomic_load ( const std:: shared_ptr < T > * p ) ; |
(2) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_load_explicit
|
(3) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
void atomic_store ( std:: shared_ptr < T > * p, std:: shared_ptr < T > r ) ; |
(4) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
void
atomic_store_explicit
|
(5) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange
|
(6) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
std::
shared_ptr
<
T
>
atomic_exchange_explicit
|
(7) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak
|
(8) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong
|
(9) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_strong_explicit
|
(10) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
|
template
<
class
T
>
bool
atomic_compare_exchange_weak_explicit
|
(11) |
(начиная с C++11)
(устарело в C++20) (удалено в C++26) |
Если несколько потоков выполнения обращаются к одному и тому же объекту
std::shared_ptr
без синхронизации и любое из этих обращений использует неконстантную функцию-член
shared_ptr
, возникнет гонка данных, если все такие обращения не выполняются через эти функции, которые являются перегрузками соответствующих атомарных функций доступа (
std::atomic_load
,
std::atomic_store
и т.д.).
Обратите внимание, что управляющий блок
shared_ptr
является потокобезопасным: различные объекты
std::shared_ptr
могут быть доступны с использованием изменяющих операций, таких как
operator
=
или
reset
, одновременно из нескольких потоков, даже если эти экземпляры являются копиями и совместно используют один и тот же управляющий блок внутри.
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
( p, expected, desired, std:: memory_order_seq_cst ,
std:: memory_order_seq_cst ) .
- Если они эквивалентны (хранят одинаковое значение указателя и либо совместно владеют одним объектом, либо оба пусты), присваивает desired в * p с использованием ограничений упорядочения памяти, заданных success , и возвращает true .
- Если они не эквивалентны, присваивает * p в * expected с использованием ограничений упорядочения памяти, заданных failure , и возвращает false .
atomic_compare_exchange_weak_explicit
может ложно завершиться неудачей.
Если p является нулевым указателем, поведение всех этих функций не определено.
Содержание |
Параметры
| p, expected | - | указатель на std::shared_ptr |
| r, desired | - | указатель std::shared_ptr |
| mo, success, failure | - | селекторы порядка памяти типа std::memory_order |
Исключения
Эти функции не вызывают исключений.
Возвращаемое значение
Примечания
Эти функции обычно реализуются с использованием мьютексов, хранящихся в глобальной хеш-таблице, где значение указателя используется в качестве ключа.
Concurrency TS
предлагает классы атомарных умных указателей
atomic_shared_ptr
и
atomic_weak_ptr
в качестве замены использования этих функций.
|
Эти функции были объявлены устаревшими в пользу специализаций шаблона std::atomic : std:: atomic < std:: shared_ptr > и std:: atomic < std:: weak_ptr > . |
(начиная с C++20)
(до C++26) |
|
Эти функции были удалены в пользу специализаций шаблона std::atomic : std:: atomic < std:: shared_ptr > и std:: atomic < std:: weak_ptr > . |
(начиная с C++26) |
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2172 | C++11 | expected could be a null pointer | the behavior is undefined in this case |
| LWG 2980 | C++11 |
empty
shared_ptr
s were never equivalent
|
equivalent if they store the same pointer value |
Смотрите также
|
(C++11)
|
проверяет, являются ли операции атомарного типа свободными от блокировок
(шаблон функции) |
|
(C++11)
(C++11)
|
атомарно заменяет значение атомарного объекта неатомарным аргументом
(шаблон функции) |
|
(C++11)
(C++11)
|
атомарно получает значение, хранящееся в атомарном объекте
(шаблон функции) |
|
(C++11)
(C++11)
|
атомарно заменяет значение атомарного объекта неатомарным аргументом и возвращает старое значение атомарного объекта
(шаблон функции) |
|
атомарно сравнивает значение атомарного объекта с неатомарным аргументом и выполняет атомарный обмен при равенстве или атомарную загрузку при неравенстве
(шаблон функции) |