Энтони Уильямс - Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Название:Параллельное программирование на С++ в действии. Практика разработки многопоточных программ
- Автор:
- Жанр:
- Издательство:ДМК Пресс
- Год: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.
Интервал:
Закладка: