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

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

>typedef см. описание atomic_uint_least16_t;

>typedef см. описание atomic_int_least32_t;

>typedef см. описание atomic_uint_least32_t;

>typedef см. описание atomic_int_least64_t;

>typedef см. описание atomic_uint_least64_t;

>typedef см. описание atomic_int_fast8_t;

>typedef см. описание atomic_uint_fast8_t;

>typedef см. описание atomic_int_fast16_t;

>typedef см. описание atomic_uint_fast16_t;

>typedef см. описание atomic_int_fast32_t;

>typedef см. описание atomic_uint_fast32_t;

>typedef см. описание atomic_int_fast64_t;

>typedef см. описание atomic_uint_fast64_t;

>typedef см. описание atomic_int8_t;

>typedef см. описание atomic_uint8_t;

>typedef см. описание atomic_int16_t;

>typedef см. описание atomic_uint16_t;

>typedef см. описание atomic_int32_t;

>typedef см. описание atomic_uint32_t;

>typedef см. описание atomic_int64_t;

>typedef см. описание atomic_uint64_t;

>typedef см. описание atomic_intptr_t;

>typedef см. описание atomic_uintptr_t;

>typedef см. описание atomic_size_t;

>typedef см. описание atomic_ssize_t;

>typedef см. описание atomic_ptrdiff_t;

>typedef см. описание atomic_intmax_t;

>typedef см. описание atomic_uintmax_t;


>template

>struct atomic;


>extern "C" void atomic_thread_fence(memory_order order);

>extern "C" void atomic_signal_fence(memory_order order);


>template

>T kill_dependency(T);

>}

D.3.1. >std::atomic_xxx, псевдонимы типов

Для совместимости с ожидаемым стандартом С предоставляются псевдонимы >typedef для атомарных целочисленных типов. Это псевдонимы либо соответствующей специализации >std::atomic, либо базового класса этой специализации с таким же интерфейсом.


Таблица D.1. Псевдонимы атомарных типов и соответствующие им специализации >std::atomic<>

>std::atomic_itypeСпециализация >std::atomic<>
>std::atomic_char>std::atomic
>std::atomic_schar>std::atomic
>std::atomic_uchar>std::atomic
>std::atomic_short>std::atomic
>std::atomic_ushort>std::atomic
>std::atomic_int>std::atomic
>std::atomic_uint>std::atomic
>std::atomic_long>std::atomic
>std::atomic_ulong>std::atomic
>std::atomic_llong>std::atomic
>std::atomic_ullong>std::atomic
>std::atomic_wchar_t>std::atomic
>std::atomic_char16_t>std::atomic
>std::atomic_char32_t>std::atomic

D.3.2. >ATOMIC_xxx_LOCK_FREE, макросы

Эти макросы определяют, являются ли атомарные типы, соответствующие различным встроенным типам, свободными от блокировок.

Объявления макросов

>#define ATOMIC_BOOL_LOCK_FREE см. описание

>#define ATOMIC_CHAR_LOCK_FREE см. описание

>#define ATOMIC_SHORT_LOCK_FREE см. описание

>#define ATOMIC_INT_LOCK_FREE см. описание

>#define ATOMIC_LONG_LOCK_FREE см. описание

>#define ATOMIC_LLONG_LOCK_FREE см. описание

>#define ATOMIC_CHAR16_T_LOCK_FREE см. описание

>#define ATOMIC_CHAR32_T_LOCK_FREE см. описание

>#define ATOMIC_WCHAR_T_LOCK_FREE см. описание

>#define ATOMIC_POINTER_LOCK_FREE см. описание

Значением >ATOMIC_xxx_LOCK_FREE может быть 0, 1 или 2. Значение 0 означает, что операции над знаковыми и беззнаковыми атомарными типами, соответствующими типу >xxx, никогда не свободны от блокировок; 1 — что операции могут быть свободны от блокировок для одних экземпляров этих типов и не свободны для других; 2 — что операции всегда свободны от блокировок. Например, если ATOMIC>_INT_LOCK_FREE равно 2, то операции над любыми экземплярами >std::atomic и >std::atomic свободны от блокировок.

Макрос >ATOMIC_POINTER_LOCK_FREE позволяет узнать, свободны ли от блокировок операции над атомарными специализациями указателя >std::atomic.

D.3.3. >ATOMIC_VAR_INIT, макрос

Макрос >ATOMIC_VAR_INIT позволяет инициализировать атомарную переменную конкретным значением.

Объявление

>#define ATOMIC_VAR_INIT(value) см. описание

Макрос расширяется в последовательность лексем, которую можно использовать в выражении следующего вида для инициализации одного из стандартных атомарных типов указанным значением:

>std::atomic x = ATOMIC_VAR_INIT(val);

Указанное значение должно быть совместимо с неатомарным типом, соответствующим данной атомарной переменной, например:

>std::atomic i = ATOMIC_VAR_INIT(42);

>std::string s;

>std::atomic p = ATOMIC_VAR_INIT(&s);

Такая инициализация не атомарна, то есть любой доступ из другого потока к инициализируемой переменной в случае, когда инициализация не происходит-раньше этого доступа, приводит к гонке за данными и, следовательно, к неопределённому поведению.

D.3.4. >std::memory_order, перечисление

Перечисление >std::memory_order применяется для задания упорядочения доступа к памяти при выполнении атомарных операций.

Объявление

>typedef enum memory_order {

> memory_order_relaxed, memory_order_consume,

> memory_order_acquire, memory_order_release,

> memory_order_acq_rel, memory_order_seq_cst

>} memory_order;

Операции, помеченные элементами этого перечисления, ведут себя, как описано ниже (подробное описание упорядочения доступа к памяти см. в главе 5).

>STD::MEMORY_ORDER_RELAXED

Операция не обеспечивает никаких дополнительных ограничений на упорядочение.

>STD::MEMORY_ORDER_RELEASE

Операция освобождения указанной ячейки памяти. Следовательно, она синхронизируется-с операцией захвата той же ячейки памяти, которая читает сохраненное значение.


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

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


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

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


Идиомы и стили С++

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


Исчерпывающее руководство по написанию всплывающих подсказок

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


Симуляция частичной специализации

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


Тонкости дизассемблирования

Очень часто под рукой не оказывается ни отладчика, ни дизассемблера, ни даже компилятора, чтобы набросать хотя бы примитивный трассировщик. Разумеется, что говорить о взломе современных защитных механизмов в таких условиях просто смешно, но что делать если жизнь заставляет?..