Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Результат
Атомарно загружает текущее, хранящееся в *this.
Возвращаемое значение
Значение, хранящееся в *this, в точке вызова.
Исключения
Нет.
Примечание. Это атомарная операция загрузки для ячейки памяти, содержащей *this.
STD::ATOMIC_LOAD , ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно загружает текущее значение объекта std::atomic.
Объявление
template
BaseType atomic_load(volatile const atomic* p) noexcept;
template
BaseType atomic_load(const atomic* p) noexcept;
Результат
return p->load();
STD::ATOMIC_LOAD_EXPLICIT , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно загружает текущее значение объекта std::atomic.
Объявление
template
BaseType atomic_load_explicit(
volatile const atomic* p,
memory_order order) noexcept;
template
BaseType atomic_load_explicit(
const atomic* p, memory_order order) noexcept;
Результат
return p->load(order);
STD::ATOMIC::OPERATOR , ОПЕРАТОР ПРЕОБРАЗОВАНИЯ В ТИП BASETYPE
Загружает значение, хранящееся в *this.
Объявление
operator BaseType() const volatile noexcept;
operator BaseType() const noexcept;
Результат
return this->load();
STD::ATOMIC::STORE , ФУНКЦИЯ-ЧЛЕН
Атомарно сохраняет новое значение в объекте atomic.
Объявление
void store(
BaseType new_value, memory_order order = memory_order_seq_cst)
volatile noexcept;
void store(
BaseType new_value, memory_order order = memory_order_seq_cst)
noexcept;
Предусловия
Параметр orderдолжен принимать одно из значений std::memory_order_relaxed, std::memory_order_releaseили std::memory_order_seq_cst.
Результат
Атомарно сохраняет значение new_valueв *this.
Исключения
Нет.
Примечание. Это атомарная операция сохранения для ячейки памяти, содержащей *this.
STD::ATOMIC_STORE , ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно сохраняет новое значение в объекте atomic.
Объявление
template
void atomic_store(
volatile atomic* p, BaseType new_value) noexcept;
template
void atomic_store(
atomic* p, BaseType new_value) noexcept;
Результат
p->store(new_value);
STD::ATOMIC_STORE_EXPLICIT , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно сохраняет новое значение в объекте atomic.
Объявление
template
void atomic_store_explicit(
volatile atomic* p, BaseType new_value,
memory_order order) noexcept;
template
void atomic_store_explicit(
atomic* p, BaseType new_value,
memory_order order) noexcept;
Результат
p->store(new_value, order);
STD::ATOMIC::EXCHANGE , ФУНКЦИЯ-ЧЛЕН
Атомарно сохраняет новое значение и читает старое.
Объявление
BaseType exchange(
BaseType new_value,
memory_order order = memory_order_seq_cst) volatile noexcept;
Результат
Атомарно сохраняет значение new_valueв *thisи извлекает прежнее значение *this.
Возвращаемое значение
Значение *thisнепосредственно перед сохранением.
Исключения
Нет.
Примечание. Это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей *this.
STD::ATOMIC_EXCHANGE , ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно сохраняет новое значение в объекте atomicи читает предыдущее значение.
Объявление
template
BaseType atomic_exchange(
volatile atomic* p, BaseType new_value) noexcept;
template
BaseType atomic_exchange(
atomic* p, BaseType new_value) noexcept;
Результат
return p->exchange(new_value);
STD::ATOMIC_EXCHANGE_EXPLICIT , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно сохраняет новое значение в объекте atomicи читает предыдущее значение.
Объявление
template
BaseType atomic_exchange_explicit(
volatile atomic* p,
BaseType new_value, memory_order order)
noexcept;
template
BaseType atomic_exchange_explicit(
atomic* p,
BaseType new_value, memory_order order) noexcept;
Результат
return p->exchange(new_value, order);
STD::ATOMIC::COMPARE_EXCHANGE_STRONG , ФУНКЦИЯ-ЧЛЕН
Атомарно сравнивает значение с ожидаемым и, если они равны, сохраняет новое значение. Если значения не равны, то заменяет ожидаемое значение прочитанным.
Объявление
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 ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Интервал:
Закладка: