Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - [190]

Шрифт
Интервал

>  volatile noexcept;

> T* fetch_sub(

>  ptrdiff_t, memory_order = memory_order_seq_cst) noexcept;

> T* operator++() volatile noexcept;

> T* operator++() noexcept;

> T* operator++(int) volatile noexcept;

> T* operator++(int) noexcept;

> T* operator--() volatile noexcept;

> T* operator--() noexcept;

> T* operator--(int) volatile noexcept;

> T* operator--(int) noexcept;

> T* operator+=(ptrdiff_t) volatile noexcept;

> T* operator+=(ptrdiff_t) noexcept;

> T* operator-=(ptrdiff_t) volatile noexcept;

> T* operator-=(ptrdiff_t) noexcept;

>};


>bool atomic_is_lock_free(volatile const atomic*) noexcept;

>bool atomic_is_lock_free(const atomic*) noexcept;

>void atomic_init(volatile atomic*, T*) noexcept;

>void atomic_init(atomic*, T*) noexcept;

>T* atomic_exchange(volatile atomic*, T*) noexcept;

>T* atomic_exchange(atomic*, T*) noexcept;

>T* atomic_exchange_explicit(

> volatile atomic*, T*, memory_order) noexcept;

>T* atomic_exchange_explicit(

> atomic*, T*, memory_order) noexcept;

>void atomic_store(volatile atomic*, T*) noexcept;

>void atomic_store(atomic*, T*) noexcept;

>void atomic_store_explicit(

> volatile atomic*, T*, memory_order) noexcept;

>void atomic_store_explicit(

> atomic*, T*, memory_order) noexcept;

>T* atomic_load(volatile const atomic*) noexcept;

>T* atomic_load(const atomic*) noexcept;

>T* atomic_load_explicit(

> volatile const atomic*, memory_order) noexcept;

>T* atomic_load_explicit(

> const atomic*, memory_order) noexcept;

>bool atomic_compare_exchange_strong(

> volatile atomic*, T** old_value, T* new_value) noexcept;

>bool atomic_compare_exchange_strong(

> volatile atomic*, T** old_value, T* new_value) noexcept;

>bool atomic_compare_exchange_strong_explicit(

> atomic*, T** old_value, T* new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

>bool atomic_compare_exchange_strong_explicit(

> atomic*, T** old_value, T* new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

>bool atomic_compare_exchange_weak(

> volatile atomic*, T** old_value, T* new_value) noexcept;

>bool atomic_compare_exchange_weak(

> atomic*, T** old_value, T* new_value) noexcept;

>bool atomic_compare_exchange_weak_explicit(

> volatile atomic*,

> T** old_value, T* new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

>bool atomic_compare_exchange_weak_explicit(

> atomic*, T** old_value, T* new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

>T* atomic_fetch_add(volatile atomic*, ptrdiff_t) noexcept;

>T* atomic_fetch_add(atomic*, ptrdiff_t) noexcept;

>T* atomic_fetch_add_explicit(

> volatile atomic*, ptrdiff_t, memory_order) noexcept;

>T* atomic_fetch_add_explicit(

> atomic*, ptrdiff_t, memory_order) noexcept;

>T* atomic_fetch_sub(volatile atomic*, ptrdiff_t) noexcept;

>T* atomic_fetch_sub(atomic*, ptrdiff_t) noexcept;

>T* atomic_fetch_sub_explicit(

> volatile atomic*, ptrdiff_t, memory_order) noexcept;

>T* atomic_fetch_sub_explicit(

> atomic*, ptrdiff_t, memory_order) noexcept;

Те операции, которые предоставляются также основным шаблоном (см. приложение D.3.8), имеют точно такую же семантику.

>STD::ATOMIC::FETCH_ADD, ФУНКЦИЯ-ЧЛЕН

Атомарно загружает значение, заменяет его суммой этого значения и аргумента >i, применяя стандартные правила арифметики указателей, и возвращает старое значение.

Объявление

>T* fetch_add(

> ptrdiff_t i, memory_order order = memory_order_seq_cst)

> volatile noexcept;

>T* fetch_add(

> ptrdiff_t i, memory_order order = memory_order_seq_cst) noexcept;

Результат

Атомарно возвращает текущее значение >*this и сохраняет в >*this значение >old-value + i.

Возвращаемое значение

Значение >*this непосредственно перед сохранением.

Исключения

Нет.

Примечание. Это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей >*this.

>STD::ATOMIC_FETCH_ADD_EXPLICIT, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА

Атомарно читает значение из экземпляра >atomic и заменяет его суммой этого значения и аргумента >i, применяя стандартные правила арифметики указателей.

Объявление

>T* atomic_fetch_add_explicit(

> volatile atomic* p, ptrdiff_t i, memory_order order)

> noexcept;

>T* atomic_fetch_add_explicit(

> atomic* p, ptrdiff_t i, memory_order order) noexcept;

Результат

>return p->fetch_add(i, order);

>STD::ATOMIC::FETCH_SUB, ФУНКЦИЯ-ЧЛЕН

Атомарно загружает значение, заменяет его разностью этого значения и аргумента >i, применяя стандартные правила арифметики указателей, и возвращает старое значение.

Объявление

>T* fetch_sub(

> ptrdiff_t i, memory_order order = memory_order_seq_cst)

> volatile noexcept;

>T* fetch_sub(

> ptrdiff_t i, memory_order order = memory_order_seq_cst)

> noexcept;

Результат

Атомарно возвращает текущее значение >*this и сохраняет в >*this значение >old-value - i.

Возвращаемое значение

Значение >*this непосредственно перед сохранением.

Исключения

Нет.

Примечание. Это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей >*this.

>STD::ATOMIC_FETCH_SUB, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА

Атомарно читает значение из экземпляра >atomic и заменяет его разностью этого значения и аргумента


Еще от автора Энтони Д Уильямс
Викиномика. Как массовое сотрудничество изменяет всё

Это знаменитый бестселлер, который научит вас использовать власть массового сотрудничества и покажет, как применять викиномику в вашем бизнесе. Переведенная более чем на двадцать языков и неоднократно номинированная на звание лучшей бизнес-книги, "Викиномика" стала обязательным чтением для деловых людей во всем мире. Она разъясняет, как массовое сотрудничество происходит не только на сайтах Wikipedia и YouTube, но и в традиционных компаниях, использующих технологии для того, чтобы вдохнуть новую жизнь в свои предприятия.Дон Тапскотт и Энтони Уильямс раскрывают принципы викиномики и рассказывают потрясающие истории о том, как массы людей (как за деньги, так и добровольно) создают новости, изучают геном человека, создают ремиксы любимой музыки, находят лекарства от болезней, редактируют школьные учебники, изобретают новую косметику, пишут программное обеспечение и даже строят мотоциклы.Знания, ресурсы и вычислительные способности миллиардов людей самоорганизуются и превращаются в новую значительную коллективную силу, действующую согласованно и управляемую с помощью блогов, вики, чатов, сетей равноправных партнеров и личные трансляции.


Рекомендуем почитать
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы.


Справочник по PHP

Вниманию читателей предлагается справочник по PHP.Справочник предназначается для людей, уже освоивших азы программирования на языке PHP.Справочник создан на основе информации, предоставленной на сайте «Справочник Web-языков» www.spravkaweb.ru.


Стандарты программирования на С++. 101 правило и рекомендация

Эта книга поможет новичку стать профессионалом, так как в ней представлен сконцентрированный лучший опыт программистов на С++, обобщенный двумя экспертами мирового класса.Начинающий программист найдет в ней простые и понятные рекомендации для ежедневного использования, подкрепленные примерами их конкретного применения на практике.Опытные программисты найдут в ней советы и новые рекомендации, которые можно сразу же принять на вооружение. Программисты-профессионалы могут использовать эту книгу как основу для разработки собственных стандартов кодирования, как для себя лично, так и для группы, которой они руководят.Конечно, книга рассчитана в первую очередь на профессиональных программистов с глубокими знаниями языка, однако она будет полезна любому, кто захочет углубить свои знания в данной области.


Практика и проблематика моделирования бизнес-процессов

Цель книги – познакомить читателей с существующими подходами и решениями в области моделирования бизнес-архитектуры предприятия. В книге освещаются различные аспекты данной проблематики, в том числе такие вопросы как базовые подходы к моделированию и возможности современных инструментальных средств.Особое внимание уделяется специфике организации проектов по разработке моделей бизнес-архитекуры. На основе практического опыта реализации проектов по моделированию бизнес-процессов в различных предметных областях проанализированы и обобщены типичные риски, ошибки и заблуждения основных участников, даны рекомендации по их предупреждению.


Освой самостоятельно С++ за 21 день

В книге широко представлены возможности новейшей версии программного продукта Microsoft Visual C++. Подробно описаны средства и подходы программирования современных профессиональных приложений. Материалы книги дополнены многочисленными демонстрационными программами, в процессе разработки которых максимально используются возможности программных инструментов Microsoft Visual Studio. Особое внимание уделено новинкам версии 6.0 и новейшим технологиям объектно-ориентированного программирования, включая использование библиотеки MFC и шаблонов классов, а также создание связанных списков.


Использование ListView в режиме виртуального списка

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.