Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Объявление
integral-type atomic_fetch_or(
volatile atomic< integral-type >* p, integral-type i) noexcept;
integral-type atomic_fetch_or(
atomic< integral-type >* p, integral-type i) noexcept;
Результат
return p->fetch_or(i);
STD::ATOMIC_FETCH_OR_EXPLICIT , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно читает значение из экземпляра atomic< integral-type >и заменяет его результатом операции поразрядное-или между этим значением и аргументом i .
Объявление
integral-typ e atomic_fetch_or_explicit(
volatile atomic< integral-type >* p,
integral-type i, memory_order order) noexcept;
integral-type atomic_fetch_or_explicit(
atomic< integral-type >* p,
integral-type i, memory_order order) noexcept;
Результат
return p->fetch_or(i, order);
STD::ATOMIC::FETCH_XOR , ФУНКЦИЯ-ЧЛЕН
Атомарно загружает значение и заменяет его результатом операции поразрядное исключающее-или между этим значением и аргументом i.
Объявление
integral-type fetch_xor(
integral-type i, memory_order order = memory_order_seq_cst)
volatile noexcept;
integral-type fetch_xor(
integral-type i, memory_order order = memory_order_seq_cst)
noexcept;
Результат
Атомарно возвращает прежнее значение *thisи сохраняет в *thisзначение old-value ^ i.
Возвращаемое значение
Значение *thisнепосредственно перед сохранением.
Исключения
Нет.
Примечание. Это атомарная операция чтения-модификации-записи для ячейки памяти, содержащей *this.
STD::ATOMIC_FETCH_XOR , ФУНКЦИЯ, НЕ ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно читает значение из экземпляра atomic< integral-type >и заменяет его результатом операции поразрядное исключающее-или между этим значением и аргументом i.
Объявление
integral-type atomic_fetch_xor(
volatile atomic< integral-type >* p, integral-type i) noexcept;
integral-type atomic_fetch_xor(
atomic< integral-type >* p, integral-type i) noexcept;
Результат
return p->fetch_xor(i);
STD::ATOMIC_FETCH_XOR_EXPLICIT , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Атомарно читает значение из экземпляра atomic< integral-type >и заменяет его результатом операции поразрядное исключающее-или между этим значением и аргументом i.
Объявление
integral-type atomic_fetch_xor_explicit(
volatile atomic< integral-type >* p,
integral-type i, memory_order order) noexcept;
integral-type atomic_fetch_xor_explicit(
atomic< integral-type >* p,
integral-type i, memory_order order) noexcept;
Результат
return p->fetch_xor(i,order);
STD::ATOMIC::OPERATOR++ , ОПЕРАТОР ПРЕДИНКРЕМЕНТА
Атомарно инкрементирует значение, хранящееся в *this, и возвращает новое значение.
Объявление
integral-type operator++() volatile noexcept;
integral-type operator++() noexcept;
Результат
return this->fetch_add(1) + 1;
STD::ATOMIC::OPERATOR++ , ОПЕРАТОР ПОСТИНКРЕМЕНТА
Атомарно инкрементирует значение, хранящееся в *this, и возвращает старое значение.
Объявление
integral-type operator++(int) volatile noexcept;
integral-type operator++(int) noexcept;
Результат
return this->fetch_add(1);
STD::ATOMIC::OPERATOR-- , ОПЕРАТОР ПРЕДЕКРЕМЕНТА
Атомарно декрементирует значение, хранящееся в *this, и возвращает новое значение.
Объявление
integral-type operator--() volatile noexcept;
integral-type operator--() noexcept;
Результат
return this->fetch_sub(1) - 1;
STD::ATOMIC::OPERATOR-- , ОПЕРАТОР ПОСТДЕКРЕМЕНТА
Атомарно декрементирует значение, хранящееся в *this, и возвращает старое значение.
Объявление
integral-type operator--(int) volatile noexcept;
integral-type operator--(int) noexcept;
Результат
return this->fetch_sub(1);
STD::ATOMIC::OPERATOR+= , СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно складывает значение аргумента со значением, хранящимся в *this, и возвращает новое значение.
Объявление
integral-type operator+=(integral-type i) volatile noexcept;
integral-type operator+=(integral-type i) noexcept;
Результат
return this->fetch_add(i) + i;
STD::ATOMIC::OPERATOR-= , СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно вычитает значение аргумента из значения, хранящегося в *this, и возвращает новое значение.
Объявление
integral-type operator-=( integral-type i) volatile noexcept;
integral-type operator-=( integral-type i) noexcept;
Результат
return this->fetch_sub(i, std::memory_order_seq_cst) - i;
STD::ATOMIC::OPERATOR&= , СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно заменяет значение, хранящееся в *this, результатом операции поразрядное-и между этим значением и значением аргумента и возвращает новое значение.
Объявление
integral-type operator&=( integral-type i) volatile noexcept;
integral-type operator&=( integral-type i) noexcept;
Результат
return this->fetch_and(i) & i;
STD::ATOMIC::OPERATOR|= , СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно заменяет значение, хранящееся в *this, результатом операции поразрядное-или между этим значением и значением аргумента и возвращает новое значение.
Объявление
integral-type operator|=( integral-type i) volatile noexcept;
integral-type operator|=( integral-type i) noexcept;
Результат
return this->fetch_or(i, std::memory_order_seq_cst) | i;
STD::ATOMIC::OPERATOR^= , СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно заменяет значение, хранящееся в *this, результатом операции поразрядное исключающее-или между этим значением и значением аргумента и возвращает новое значение.
Объявление
integral-type operator^=(integral-type i) volatile noexcept;
integral-type operator^=(integral-type i) noexcept;
Результат
return this->fetch_xor(i, std::memory_order_seq_cst) ^ i;
STD::ATOMIC , ЧАСТИЧНАЯ СПЕЦИАЛИЗАЦИЯ
Частичная специализация std::atomicшаблона std::atomicпредоставляет атомарный тип для любого указательного типа, с полным набором операций.
Экземпляры std::atomicне удовлетворяют требованиям концепций CopyConstructibleи CopyAssignable, поскольку такие операции невозможно выполнить атомарно.
Определение класса
template
struct atomic {
atomic() noexcept = default;
constexpr atomic(T*) noexcept;
bool operator=(T*) volatile;
bool operator=(T*);
atomic(const atomic&) = delete;
atomic& operator=(const atomic&) = delete;
atomic& operator=(const atomic&) volatile = delete;
bool is_lock_free() const volatile noexcept;
bool is_lock_free() const noexcept;
void store(T*, memory_order = memory_order_seq_cst)
volatile noexcept;
void store(T*, memory_order = memory_order_seq_cst) noexcept;
Интервал:
Закладка: