Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год:2012
- Город:Москва
- ISBN:978-5-94074-448-1
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ краткое содержание
Книга «Параллельное программирование на С++ в действии» не предполагает предварительных знаний в этой области. Вдумчиво читая ее, вы научитесь писать надежные и элегантные многопоточные программы на С++11. Вы узнаете о том, что такое потоковая модель памяти, и о том, какие средства поддержки многопоточности, в том числе запуска и синхронизации потоков, имеются в стандартной библиотеке. Попутно вы познакомитесь с различными нетривиальными проблемами программирования в условиях параллелизма.
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Результат
return p->fetch_sub(i, order);
STD::ATOMIC::OPERATOR++
, ОПЕРАТОР ПРЕДИНКРЕМЕНТА
Атомарно инкрементирует значение, хранящееся в *this
, применяя стандартные правила арифметики указателей, и возвращает новое значение.
Объявление
T* operator++() volatile noexcept;
T* operator++() noexcept;
Результат
return this->fetch_add(1) + 1;
STD::ATOMIC::OPERATOR++
, ОПЕРАТОР ПОСТИНКРЕМЕНТА
Атомарно инкрементирует значение, хранящееся в *this
, и возвращает старое значение.
Объявление
T* operator++(int) volatile noexcept;
T* operator++(int) noexcept;
Результат
return this->fetch_add(1);
STD::ATOMIC::OPERATOR--
, ОПЕРАТОР ПРЕДЕКРЕМЕНТА
Атомарно декрементирует значение, хранящееся в *this
, применяя стандартные правила арифметики указателей, и возвращает новое значение.
Объявление
T* operator--() volatile noexcept;
T* operator--() noexcept;
Результат
return this->fetch_sub(1) - 1;
STD::ATOMIC::OPERATOR--
, ОПЕРАТОР ПОСТДЕКРЕМЕНТА
Атомарно декрементирует значение, хранящееся в *this
, применяя стандартные правила арифметики указателей, и возвращает старое значение.
Объявление
T* operator--(int) volatile noexcept;
T* operator--(int) noexcept;
Результат
return this->fetch_sub(1);
STD::ATOMIC::OPERATOR+=
, СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно складывает значение аргумента со значением, хранящимся в *this
, применяя стандартные правила арифметики указателей, и возвращает новое значение.
Объявление
T* operator+=(ptrdiff_t i) volatile noexcept;
T* operator+=(ptrdiff_t i) noexcept;
Результат
return this->fetch_add(i) + i;
STD::ATOMIC::OPERATOR-=
, СОСТАВНОЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Атомарно вычитает значение аргумента из значения, хранящегося в *this
, применяя стандартные правила арифметики указателей, и возвращает новое значение.
Объявление
T* operator-=(ptrdiff_t i) volatile noexcept;
T* operator-=(ptrdiff_t i) noexcept;
Результат
return this->fetch_sub(i) - i;
D.4. Заголовок
В заголовке объявлены средства для обработки результатов асинхронных операций, которые могли быть выполнены в другом потоке.
Содержимое заголовка
namespace std {
enum class future_status {
ready, timeout, deferred
};
enum class future_errc {
broken_promise,
future_already_retrieved,
promise_already_satisfied,
no_state
};
class future_error;
const error_category& future_category();
error_code make_error_code(future_errc e);
error_condition make_error_condition(future_errc e);
template
class future;
template
class shared_future;
template
class promise;
template
class packaged_task; // определение не предоставляется
template
class packaged_task;
enum class launch {
async, deferred
};
template
future::type>
async(FunctionType&& func, Args&& ... args);
template
future::type>
async(std::launch policy, FunctionType&& func, Args&& ... args);
}
D.4.1. Шаблон класса std::future
Шаблон класса std::future
предоставляет средства для ожидания результата асинхронной операции, начатой в другом потоке, и используется в сочетании с шаблонами классов std::promise
и std::packaged_task
и шаблоном функции std::async
, которая применяется для возврата асинхронного результата. В каждый момент времени только один экземпляр std::future
может ссылаться на данный асинхронный результат.
Экземпляры std::future
удовлетворяют требованиям концепций MoveConstructible
и MoveAssignable
, но не концепций CopyConstructible
и CopyAssignable
.
Определение класса
template
class future {
public:
future() noexcept;
future(future&&) noexcept;
future& operator=(future&&) noexcept;
~future();
future(future const&) = delete;
future& operator=(future const&) = delete;
shared_future share();
bool valid() const noexcept;
см. описание get();
void wait();
template
future_status wait_for(
std::chrono::duration const& relative_time);
template
future_status wait_until(
std::chrono::time_point const& absolute_time);
};
STD::FUTURE
, КОНСТРУКТОР ПО УМОЛЧАНИЮ
Конструирует объект std::future
, с которым не связан асинхронный результат.
Объявление
future() noexcept;
Результат
Конструирует новый экземпляр std::future
.
Постусловия
valid()
возвращает false
.
Исключения
Нет.
STD::FUTURE
, ПЕРЕМЕЩАЮЩИЙ КОНСТРУКТОР
Конструирует объект std::future
, передавая владение асинхронным результатом от другого объекта std::future
вновь сконструированному.
Объявление
future(future&& other) noexcept;
Результат
Конструирует новый экземпляр std::future
путем перемещения содержимого объекта other
.
Постусловия
Асинхронный результат, ассоциированный с объектом other
перед вызовом конструктора, ассоциируется с вновь сконструированным объектом std::future
. С объектом other
больше не ассоциирован никакой асинхронный результат. Функция this->valid()
возвращает то же значение, которое возвращала функция other.valid()
перед вызовом конструктора. Функция other.valid()
возвращает false
.
Исключения
Нет.
STD::FUTURE
, ПЕРЕМЕЩАЮЩИЙ ОПЕРАТОР ПРИСВАИВАНИЯ
Передает владение асинхронным результатом, ассоциированным с объектом std::future
, другому объекту.
Объявление
future(future&& other) noexcept;
Результат
Передает владение асинхронным состоянием между экземплярами std::future
.
Постусловия
Асинхронный результат, ассоциированный с объектом other перед вызовом оператора, ассоциируется с *this
. Объект *this
перестаёт быть владельцем своего прежнего асинхронного состояния (если оно было с ним ассоциировано), и если эта ссылка на асинхронное состояние была последней, то оно уничтожается. Функция this->valid()
возвращает то же значение, которое возвращала функция other
, valid()
перед вызовом оператора. Функция other.valid()
возвращает false
.
Исключения
Нет.
STD::FUTURE
, ДЕСТРУКТОР
Уничтожает объект std::future
.
Объявление
~future();
Результат
Уничтожает *this
. Если с *this
была ассоциирована последняя ссылка на асинхронный результат (при условии, что с *this
вообще что-то ассоциировано), то этот асинхронный результат уничтожается.
Исключения
Нет.
STD::FUTURE::SHARE
, ФУНКЦИЯ-ЧЛЕН
Конструирует новый экземпляр std::shared_future
и передаёт ему владение асинхронным результатом, ассоциированным с *this
.
Интервал:
Закладка: