Объявление
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;
В заголовке объявлены средства для обработки результатов асинхронных операций, которые могли быть выполнены в другом потоке.
Содержимое заголовка
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
вновь сконструированному.
Читать дальше