Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
this->mutex() == NULL, this->owns_lock() == false.
STD::UNIQUE_LOCK , ЗАХВАТЫВАЮЩИЙ КОНСТРУКТОР
Конструирует экземпляр std::unique_lock, который захватывает указанный мьютекс.
Объявление
explicit unique_lock(mutex_type& m);
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс. Вызывает m.lock().
Исключения
Любое исключение, возбуждаемое m.lock().
Постусловия
this->owns_lock() == true, this->mutex() == &m.
STD::UNIQUE_LOCK , КОНСТРУКТОР, ПЕРЕНИМАЮЩИЙ БЛОКИРОВКУ
Конструирует экземпляр std::unique_lock, который владеет блокировкой указанного мьютекса.
Объявление
unique_lock(mutex_type& m, std::adopt_lock_t);
Предусловия
Вызывающий поток должен владеть блокировкой m.
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс и принимает владение блокировкой m, удерживаемой вызывающим потоком.
Исключения
Нет.
Постусловия
this->owns_lock() == true, this->mutex() == &m.
STD::UNIQUE_LOCK , КОНСТРУКТОР ОТЛОЖЕННОЙ БЛОКИРОВКИ
Конструирует экземпляр std::unique_lock, который не владеет блокировкой указанного мьютекса.
Объявление
unique_lock(mutex_type& m, std::defer_lock_t) noexcept;
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс.
Исключения
Нет.
Постусловия
this->owns_lock() == false, this->mutex() == &m.
STD::UNIQUE_LOCK , КОНСТРУКТОР ПРОБНОЙ БЛОКИРОВКИ
Конструирует экземпляр std::unique_lock, ассоциированный с указанным мьютексом, и пытается захватить этот мьютекс.
Объявление
unique_lock(mutex_type& m, std::try_to_lock_t);
Предусловия
Тип Mutex, которым конкретизирован шаблон std::unique_lock, должен удовлетворять требованиям концепции Lockable.
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс. Вызывает m.try_lock().
Исключения
Нет.
Постусловия
this->owns_lock()возвращает результат вызова m.try_lock(), this->mutex() == &m.
STD::UNIQUE_LOCK , КОНСТРУКТОР ПРОБНОЙ БЛОКИРОВКИ С ОТНОСИТЕЛЬНЫМ ТАЙМАУТОМ
Конструирует экземпляр std::unique_lock, ассоциированный с указанным мьютексом, и пытается захватить этот мьютекс.
Объявление
template
unique_lock(
mutex_type& m,
std::chrono::duration const& relative_time);
Предусловия
Тип Mutex, которым конкретизирован шаблон std::unique_lock, должен удовлетворять требованиям концепции TimedLockable.
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс. Вызывает m.try_lock_for(relative_time).
Исключения
Нет.
Постусловия
this->owns_lock()возвращает результат вызова m.try_lock_for(), this->mutex() == &m.
STD::UNIQUE_LOCK , КОНСТРУКТОР ПРОБНОЙ БЛОКИРОВКИ С АБСОЛЮТНЫМ ТАЙМАУТОМ
Конструирует экземпляр std::unique_lock, ассоциированный с указанным мьютексом, и пытается захватить этот мьютекс.
Объявление
template
unique_lock(
mutex_type& m,
std::chrono::time_point const& absolute_time);
Предусловия
Тип Mutex, которым конкретизирован шаблон std::unique_lock, должен удовлетворять требованиям концепции TimedLockable.
Результат
Конструирует экземпляр std::unique_lock, который ссылается на указанный мьютекс. Вызывает m.try_lock_until(relative_time).
Исключения
Нет.
Постусловия
this->owns_lock()возвращает результат вызова m.try_lock_until(), this->mutex() == &m.
STD::UNIQUE_LOCK , ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР
Передает владение блокировкой от существующего объекта std::unique_lockвновь сконструированному.
Объявление
unique_lock(unique_lock&& other) noexcept;
Результат
Конструирует экземпляр std::unique_lock. Если объект otherвладел блокировкой мьютекса до вызова конструктора, то теперь этой блокировкой владеет вновь сконструированный объект std::unique_lock.
Постусловия
Для вновь сконструированного объекта std::unique_lock x, x.mutex()равно значению other.mutex()до вызова конструктора, а x.owns_lock()равно значению other.owns_lock()до вызова конструктора. other.mutex() == NULL, other.owns_lock() == false.
Исключения
Нет.
Примечание. Объекты std::unique_lockне удовлетворяют требованиям концепции CopyConstructible, поэтому копирующего конструктора не существует, существует только этот перемещающий конструктор.
STD::UNIQUE_LOCK , ПЕРЕМЕЩАЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Передает владение блокировкой от одного объекта std: :unique_ lockдругому.
Объявление
unique_lock& operator=(unique_lock&& other) noexcept;
Результат
Если this->owns_lock()возвращала trueдо вызова этого оператора, то вызывает this->unlock(). Если объект otherвладел блокировкой мьютекса до присваивания, то теперь этой блокировкой владеет *this.
Постусловия
this.mutex()равно значению other.mutex()до присваивания, а this.owns_lock()равно значению other.owns_lock()до присваивания. other.mutex() == NULL, other.owns_lock() == false.
Исключения
Нет.
Примечание. Объекты std::unique_lockне удовлетворяют требованиям концепции CopyAssignable, поэтому копирующего оператора присваивания не существует, существует только этот перемещающий оператор присваивания.
STD::UNIQUE_LOCK , ДЕСТРУКТОР
Уничтожает экземпляр std::unique_lockи освобождает соответствующий мьютекс, если им владел уничтоженный экземпляр.
Объявление
~unique_lock();
Результат
Если this->owns_lock()возвращает true, то вызывает this->mutex()->unlock().
Исключения
Нет.
STD::UNIQUE_LOCK::SWAP , ФУНКЦИЯ-ЧЛЕН
Обменивает владение ассоциированными блокировками мьютекса между двумя объектами std::unique_lock.
Объявление
void swap(unique_lock& other) noexcept;
Результат
Если otherвладел блокировкой мьютекса до вызова, то теперь этой блокировкой владеет *this. Если *thisвладел блокировкой мьютекса до вызова, то теперь этой блокировкой владеет other.
Постусловия
this.mutex()равно значению other.mutex()до вызова, other.mutex()равно значению this.mutex()до вызова, this.owns_lock()равно значению other.owns_lock()до вызова, other.owns_lock()равно значению this.owns_lock()до вызова.
Исключения
Нет.
STD::SWAP , ФУНКЦИЯ, HE ЯВЛЯЮЩАЯСЯ ЧЛЕНОМ КЛАССА
Интервал:
Закладка: