![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Programming interfacesBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 6. Boost.Atomic
|
Макро |
Описание |
---|---|
|
Влияет на 32-битную сборку x86 Oracle Studio. При определении библиотека предполагает, что целевой процессор не поддерживает |
|
Влияет на 64-битные x86 MSVC и сборки Oracle Studio. При определении библиотека предполагает, что целевой процессор не поддерживает |
|
Влияет на 32-битную сборку x86 Oracle Studio. При определении библиотека предполагает, что целевой процессор не поддерживает |
|
При определении все операции выполняются с помощью замков. Это в основном используется для тестирования и не должно использоваться в реальных проектах. |
|
Контрольная библиотека. Если оно определено, библиотека предполагает динамическую связь, иначе статичную. Последний макрос затрагивает все библиотеки Boost, а не только.Boost.Atomic |
|
Автоссылка библиотеки управления на Windows. Когда определено, отключает автосвязь. Последний макрос затрагивает все библиотеки Boost, а не толькоBoost.Atomic . |
Помимо макросов, важно указать правильные параметры компилятора для целевого процессора. С GCC и совместимыми компиляторами это влияет на то, являются ли конкретные атомные операции свободными или нет.
Процесс ускорения строительства описан в руководствеGetting Started. Например, вы можете построитьBoost.Atomicсо следующей командной строкой:
bjam --with-atomic variant=release instruction-set=core2 stage
#include <boost/memory_order.hpp>
Перечислениеboost::memory_order
определяет следующие значения для представления ограничений упорядочивания памяти:
постоянный |
Описание |
---|---|
|
Никаких ограничений. Неформально говоря, следующие операции могут быть переупорядочены раньше, предыдущие операции могут быть переупорядочены после атомной операции. Это ограничение подходит только тогда, когда либо а) дальнейшие операции не зависят от исхода атомной операции, либо b) упорядочение осуществляется посредством автономных |
|
Выполнить |
|
Выполнить |
|
Выполнять |
|
Выполнить |
|
Обеспечение последовательной согласованности. Подразумевает |
См. разделдодля объяснения различных ограничений упорядочения.
#include <boost/atomic/atomic.hpp>
boost::atomic<T>
предоставляет способы атомарного доступа к переменным подходящего типаT
. Тип подходит, если онтривиально копируемый(3.9/9 [basic.types]). Ниже приведены примеры типов, совместимых с этим требованием:
или структура
, которая не имеет нетривиальных конструкторов копирования или перемещения или операторов назначения, имеет тривиальный деструктор, и это сопоставимо черезmemcmp
.Классы с виртуальными функциями или виртуальные базовые классы не удовлетворяют требованиям. Также следует предупредить, что структуры с «подкладкой» между участниками данных могут сравнивать неравенство черезmemcmp
, даже если все участники равны.
Все атомные объекты поддерживают следующие операции:
синтаксис |
Описание |
---|---|
|
Инициализировать до неопределенного значения |
|
Инициализировать до |
|
Проверяет, свободен ли атомный объект |
|
Возврат текущего значения |
|
Написать новое значение атомной переменной |
|
Обменяйте текущее значение на |
|
Сравните текущее значение с |
|
Сравните текущее значение с |
|
Сравните текущее значение с |
|
Сравните текущее значение с |
порядок
всегда имеетпамять_order_seq_cst
в качестве параметра по умолчанию.
Compare_exchange_weak
/Compare_exchange_strong
варианты, принимающие четыре параметра, отличаются от трех вариантов параметров тем, что они позволяют указывать другое ограничение упорядочивания памяти в случае сбоя операции.
В дополнение к этим явным операциям каждыйатомный<T>
объект также поддерживает имплицитноехранение
инагрузку
посредством использования операторов «назначения» и «преобразования вT
». Избегайте использования этих операторов, поскольку они не допускают явной спецификации ограничения заказа памяти.
В дополнение к операциям, перечисленным в предыдущем разделе,boost::atomic<I>
для интегральных типовI
поддерживает следующие операции:
синтаксис |
Описание |
---|---|
|
Добавить |
|
Вычтите |
|
Применить битовый "и" с |
|
Применить битовое «или» с |
|
Применить битовый «xor» с |
порядок
всегда имеетпамять_order_seq_cst
в качестве параметра по умолчанию.
В дополнение к этим явным операциям, каждыйусилитель::I>
объект также поддерживает неявные пре-/пост-прирост/декремент, а также операторы+=
,-=
,&=
,|=
и^=
. Избегайте использования этих операторов, поскольку они не допускают явной спецификации ограничения заказа памяти.
В дополнение к операциям, применимым ко всем атомным объектам, усилитель::atomic<P>
для типов указателейP
(кроме указателейvoid
) поддерживает следующие операции:
синтаксис |
Описание |
---|---|
|
Добавить |
|
Вычтите |
порядок
всегда имеетпамять_order_seq_cst
в качестве параметра по умолчанию.
В дополнение к этим явным операциям, каждыйусилитель::atomic<P>
объект также поддерживает неявные пре-/пост-прирост/декремент, а также операторы+=
,-=
. Избегайте использования этих операторов, поскольку они не допускают явной спецификации ограничения заказа памяти.
#include <boost/atomic/fences.hpp>
синтаксис |
Описание |
---|---|
|
Издать забор для согласования с другими нитями. |
|
Ограждение для согласования с обработчиком сигнала (только в той же нити). |
#include <boost/atomic/capabilities.hpp>
Boost.Atomicопределяет ряд макросов, позволяющих детектировать время компиляции, реализуется ли атомный тип данных с использованием «истинных» атомных операций или используется ли внутренний «блок» для обеспечения атомности. Следующие макросы будут определены до0
, если операции по типу данных всегда требуют блокировки, до1
, если операции по типу данных иногда могут требовать блокировки, и до2
, если они всегда не требуют блокировки:
Макро |
Описание |
---|---|
|
Укажите, свободен ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли функция |
|
Укажите, является ли функция |
В дополнение к этим стандартным макросамBoost.Atomicтакже определяет ряд макросов расширения, которые также могут быть полезны. Как и стандартные, эти макросы определены в значениях0
,1
и2
, чтобы указать, являются ли соответствующие операции свободными от блокировки или нет.
Макро |
Описание |
---|---|
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Укажите, является ли |
|
Определяется после включения |
В приведенной выше таблицеintN_type
представляет собой тип, который подходит для хранения смежныхN
битов, соответствующим образом выровненных для атомных операций.
Статья Programming interfaces раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 6. Boost.Atomic может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 6. Boost.Atomic ::
реклама |