Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
volatile noexcept;
BaseType exchange(BaseType, memory_order = memory_order_seq_cst)
noexcept;
bool compare_exchange_strong(
BaseType & old_value, BaseType new_value,
memory_order order = memory_order_seq_cst) volatile noexcept;
bool compare_exchange_strong(
BaseType & old_value, BaseType new_value,
memory_order order = memory_order_seq_cst) noexcept;
bool compare_exchange_strong(
BaseType & old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) volatile noexcept;
bool compare_exchange_strong(
BaseType & old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
bool compare_exchange_weak(
BaseType & old_value, BaseType new_value,
memory_order order = memory_order_seq_cst)
volatile noexcept;
bool compare_exchange_weak(
BaseType & old_value, BaseType new_value,
memory_order order = memory_order_seq_cst) noexcept;
bool compare_exchange_weak(
BaseType & old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) volatile noexcept;
bool compare_exchange_weak(
BaseType & old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
operator BaseType() const volatile noexcept;
operator BaseType() const noexcept;
};
template
bool atomic_is_lock_free(
volatile const atomic*) noexcept;
template
bool atomic_is_lock_free(const atomic*)
noexcept;
template
void atomic_init(volatile atomic*, void*) noexcept;
template
void atomic_init(atomic*, void*) noexcept;
template
BaseType atomic_exchange(
volatile atomic*, memory_order) noexcept;
template
BaseType atomic_exchange(
atomic*, memory_order) noexcept;
template
BaseType atomic_exchange_explicit(
volatile atomic*, memory_order) noexcept;
template
BaseType atomic_exchange_explicit(
atomic*, memory_order) noexcept;
template
void atomic_store(volatile atomic*, BaseType) noexcept;
template
void atomic_store(atomic*, BaseType) noexcept;
template
void atomic_store_explicit(
volatile atomic*, BaseType, memory_order) noexcept;
template
void atomic_store_explicit(
atomic*, BaseType, memory_order) noexcept;
template
BaseType atomic_load(volatile const atomic*) noexcept;
template
BaseType atomic_load(const atomic*) noexcept;
template
BaseType atomic_load_explicit(
volatile const atomic*, memory_order) noexcept;
template
BaseType atomic_load_explicit(
const atomic*, memory_order) noexcept;
template
bool atomic_compare_exchange_strong(
volatile atomic*,
BaseType * old_value, BaseType new_value) noexcept;
template
bool atomic_compare_exchange_strong(
atomic*,
BaseType * old_value, BaseType new_value) noexcept;
template
bool atomic_compare_exchange_strong_explicit(
volatile atomic*, BaseType * old_value,
BaseType new_value, memory_order success_order,
memory_order failure_order) noexcept;
template
bool atomic_compare_exchange_strong_explicit(
atomic*,
BaseType * old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
template
bool atomic_compare_exchange_weak(
volatile atomic*,
BaseType * old_value, BaseType new_value) noexcept;
template
bool atomic_compare_exchange_weak(
atomic*,
BaseType * old_value, BaseType new_value) noexcept;
template
bool atomic_compare_exchange_weak_explicit(
volatile atomic*,
BaseType * old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
template
bool atomic_compare_exchange_weak_explicit(
atomic*,
BaseType * old_value, BaseType new_value,
memory_order success_order,
memory_order failure_order) noexcept;
Примечание. Хотя функции, не являющиеся членами класса, определены как шаблоны, они могут быть предоставлены в виде набора перегруженных функций, поэтому задавать явную спецификацию аргументов шаблона не следует.
STD::ATOMIC
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует экземпляр std::atomic
со значением, инициализированным по умолчанию.
Объявление
atomic() noexcept;
Результат
Конструирует новый объект std::atomic
со значением, инициализированным по умолчанию. Для объектов со статическим временем жизни обеспечивается статическая инициализация.
Примечание. Если время жизни объекта std::atomic
не статическое, то значение, которое будет иметь объект, инициализированный конструктором по умолчанию, непредсказуемо.
Исключения
Нет.
STD::ATOMIC_INIT
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Неатомарно сохраняет указанное значение в объекте типа std::atomic
.
Объявление
template
void atomic_init(
atomic volatile* p, BaseType v) noexcept;
template
void atomic_init(atomic* p, BaseType v) noexcept;
Результат
Неатомарно сохраняет значение v
в *p
. Вызов atomic_init()
с передачей в качестве аргумента объекта atomic
, который не был сконструирован по умолчанию или над которым производились какие-нибудь операции после конструирования, является неопределенным поведением.
Примечание. Поскольку эта операция сохранения неатомарна, то одновременный доступ к объекту, на который указывает p
, из другого потока (даже с помощью атомарной операции) представляет собой гонку за данными.
Исключения
Нет.
STD::ATOMIC
, КОНВЕРТИРУЮЩИЙ КОНСТРУКТОР
Конструирует экземпляр std::atomic
из переданного значения типа BaseType
.
Объявление
constexpr atomic(BaseType b) noexcept;
Результат
Конструирует новый объект std::atomic
из значения b
. Для объектов со статическим временем жизни обеспечивается статическая инициализация.
Исключения
Нет.
STD::ATOMIC
, КОНВЕРТИРУЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Сохраняет новое значение в *this
.
Объявление
BaseType operator=(BaseType b) volatile noexcept;
BaseType operator=(BaseType b) noexcept;
Результат
return this->store(b);
STD::ATOMIC::IS_LOCK_FREE
, ФУНКЦИЯ-ЧЛЕН
Сообщает, являются ли операции над *this
свободными от блокировок.
Объявление
bool is_lock_free() const volatile noexcept;
bool is_lock_free() const noexcept;
Возвращаемое значение
true
, если операции над *this
свободны от блокировок, иначе false
.
Исключения
Нет.
STD::ATOMIC_IS_LOCK_FREE
, ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Сообщает, являются ли операции над *this
свободными от блокировок.
Объявление
template
bool atomic_is_lock_free(
volatile const atomic* p) noexcept;
template
bool atomic_is_lock_free(const atomic* p) noexcept;
Результат
return p->is_lock_free();
STD::ATOMIC::LOAD
, ФУНКЦИЯ-ЧЛЕН
Атомарно загружает текущее значение объекта std::atomic
.
Объявление
BaseType load(memory_order order = memory_order_seq_cst)
const volatile noexcept;
BaseType load(
memory_order order = memory_order_seq_cst) const noexcept;
Предусловия
Параметр order
должен принимать одно из значений std::memory_order_relaxed
, std::memory_order_acquire
, std: :memory_order_consume
или std::memory_order_seq_cst
.
Интервал:
Закладка: