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

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

>, ФУНКЦИЯ-ЧЛЕН

Атомарно сравнивает значение с ожидаемым и, если они равны, сохраняет новое значение. Если значения не равны, то заменяет ожидаемое значение прочитанным.

Объявление

>bool compare_exchange_strong(

> BaseType& expected, BaseType new_value,

> memory_order order = std::memory_order_seq_cst)

> volatile noexcept;

>bool compare_exchange_strong(

> BaseType& expected, BaseType new_value,

> memory_order order = std::memory_order_seq_cst) noexcept;

>bool compare_exchange_strong(

> BaseType& expected, BaseType new_value,

> memory_order success_order, memory_order failure_order)

> volatile noexcept;

>bool compare_exchange_strong(

> BaseType& expected, BaseType new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

Предусловия

Параметр >failure_order не должен быть равен >std::memory_order_release или >std::memory_order_acq_rel.

Результат

Атомарно сравнивает >expected со значением, хранящимся в >*this, применяя побитовое сравнение, и сохраняет >new_value в >*this, если значения равны. В противном случае записывает в >expected прочитанное значение.

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

>true, если значение, хранящееся в >*this, совпало с >expected. В противном случае >false.

Исключения

Нет.

Примечание. Этот перегруженный вариант функции с тремя параметрами эквивалентен перегруженному варианту с четырьмя параметрами, где >success_order == order и >failure_order == order, с тем отличием, что если >order равно >std::memory_order_acq_rel, то >failure_order равно >std::memory_order_acquire, а если >order равно >std::memory_order_release, то >failure_order равно >std::memory_order_relaxed.

Примечание. Если результат равен >true, то это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей >*this, с упорядочением доступа к памяти >success_order; в противном случае это атомарная операция загрузки для ячейки памяти, содержащей >*this, с упорядочением доступа к памяти >failure_order.

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

Атомарно сравнивает значение с ожидаемым и, если они равны, сохраняет новое значение. Если значения не равны, то заменяет ожидаемое значение прочитанным.

Объявление

>template

>bool atomic_compare_exchange_strong(

> volatile atomic* p,

> BaseType * old_value, BaseType new_value) noexcept;

>template

>bool atomic_compare_exchange_strong(

> atomic* p,

> BaseType * old_value, BaseType new_value) noexcept;

Результат

>return p->compare_exchange_strong(*old_value, new_value);

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

Атомарно сравнивает значение с ожидаемым и, если они равны, сохраняет новое значение. Если значения не равны, то заменяет ожидаемое значение прочитанным.

Объявление

>template

>bool atomic_compare_exchange_strong_explicit(

> volatile atomic* p,

> BaseType * old_value, BaseType new_value,

> memory_order success_order, memory_order failure_order)

> noexcept;

>template

>bool atomic_compare_exchange_strong_explicit(

> atomic* p,

> BaseType * old_value, BaseType new_value,

> memory_order success_order, memory_order failure_order)

> noexcept;

Результат

>return p->compare_exchange_strong(

>*old_value, new_value, success_order, failure_order) noexcept;

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

Атомарно сравнивает значение с ожидаемым и, если они равны и обновление может быть произведено атомарно, то сохраняет новое значение. Если значения не равны или обновление не может быть произведено атомарно, то заменяет ожидаемое значение прочитанным.

Объявление

>bool compare_exchange_weak(

> BaseType& expected, BaseType new_value,

> memory_order order = std::memory_order_seq_cst)

> volatile noexcept;

>bool compare_exchange_weak(

> BaseType& expected, BaseType new_value,

> memory_order order = std::memory_order_seq_cst) noexcept;

>bool compare_exchange_weak(

> BaseType& expected, BaseType new_value,

> memory_order success_order, memory_order failure_order)

> volatile noexcept;

>bool compare_exchange_weak(

> BaseType& expected, BaseType new_value,

> memory_order success_order,

> memory_order failure_order) noexcept;

Предусловия

Параметр >failure_order не должен быть равен >std::memory_order_release или >std::memory_order_acq_rel.

Результат

Атомарно сравнивает >expected со значением, хранящимся в >*this, применяя побитовое сравнение, и сохраняет >new_value в >*this, если значения равны. Если значения не равны или обновление не может быть произведено атомарно, записывает в >expected прочитанное значение.

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

>true, если значение, хранящееся в >*this, совпало с >expected и >new_value успешно сохранено в >*this. В противном случае >false.

Исключения

Нет.

Примечание. Этот перегруженный вариант функции с тремя параметрами эквивалентен перегруженному варианту с четырьмя параметрами, где >success_order == order и >failure_order == order, с тем отличием, что если >order равно >std::memory_order_acq_rel, то >failure_order равно >std::memory_order_acquire, а если order равно >std::memory_order_release, то >failure_order равно >std::memory_order_relaxed.

Примечание. Если результат равен


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

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


Рекомендуем почитать
Пользовательские истории. Искусство гибкой разработки ПО

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


Программное обеспечение и его разработка

Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.


C# 4.0: полное руководство

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


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

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


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

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


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

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