Предоставляет асинхронный канал для передачи значений или ошибок между потоками в ассоциированный Future.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 5c323bf911dfПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Предоставляет асинхронный канал для передачи значений или ошибок между потоками в ассоциированный Future.
Класс ara::core::Promise функционирует как асинхронная конечная точка записи для передачи значений, ошибок или результатов между потоками в общее состояние [SWS_CORE_00341]. Доступ на чтение осуществляется через извлекаемый ровно один раз Future, который освобождается при предоставлении результата [SWS_CORE_00344]. Поскольку класс не является копируемым, состояние строго остается в единоличном владении благодаря семантике перемещения, при этом повторная установка результата или многократное извлечение Future приводит к стандартизированным нарушениям.
Контекст
Класс ara::core::Promise представляет собой специфичную для Adaptive Platform реализацию концепта std::promise, известного из стандарта C++. Он определен в заголовке ara/core/future.h как шаблон Promise<T, E = ErrorCode> и служит асинхронной конечной точкой записи общего состояния (shared state). По этому каналу производитель передает между потоками либо вычисленное выходное значение, либо ошибку, либо агрегированный ara::core::Result. Соответствующая сторона получателя обращается к результату через ассоциированный ara::core::Future, извлекаемый с помощью метода экземпляра get_future[SWS_CORE_00344]. В отличие от стандартного механизма C++, основанного главным образом на исключениях, AUTOSAR Adaptive закрепляет парадигму типизированных ошибок: если тип ошибки E выбран отличным от ara::core::ErrorCode, спецификация форсирует ошибку компиляции.
Жизненный цикл
Экземпляр штатно создается через конструктор по умолчанию без параметров, который ведет себя аналогично соответствующему конструктору std::promise, является потокобезопасным и устанавливает новое общее состояние [SWS_CORE_00341]. Чтобы гарантировать однозначные отношения владения этим состоянием, операции копирования полностью запрещены: как конструктор копирования [SWS_CORE_00350], так и оператор присваивания с копированием [SWS_CORE_00351] объявлены удаленными (delete).
Однако класс поддерживает семантику перемещения (Move). Конструктор перемещения принимает общее состояние исходного экземпляра [SWS_CORE_00342]. При присваивании с перемещением целевой экземпляр отбрасывает свое прежнее общее состояние и принимает состояние переданного объекта аналогично операции обмена [SWS_CORE_00343]. Кроме того, метод swap позволяет обменивать внутреннее состояние с другим экземпляром [SWS_CORE_00352]. При уничтожении через деструктор еще удерживаемое общее состояние освобождается или покидается [SWS_CORE_00349]. В то время как конструктор по умолчанию спроектирован как потокобезопасный [SWS_CORE_00341], операции перемещения, присваивания, Swap и уничтожение не являются потокобезопасными ([SWS_CORE_00342], [SWS_CORE_00343], [SWS_CORE_00352], [SWS_CORE_00349]).
Получение Future: перед началом асинхронной обработки производитель вызывает get_future()[SWS_CORE_00344]. Поскольку на один Promise допускается только один ассоциированный Future, этот вызов разрешено выполнять ровно один раз. Возвращенный Future передается потоку-потребителю.
Установка результата: после завершения асинхронной операции производитель переводит результат в общее состояние и переводит последнее в состояние ready. Для этого предусмотрены потокобезопасные перегрузки для операций копирования и перемещения:
Спецификация определяет строгие предусловия для всех взаимодействий с общим состоянием, несоблюдение которых приводит к стандартизированным нарушениям (Violations):
Многократное извлечение Future: если get_future() вызывается более одного раза для одного и того же общего состояния, возникает нарушение IsoStdFutureErrcFutureAlreadyRetrievedViolation[SWS_CORE_00344].
Отсутствие Shared State: если вызываемый экземпляр не владеет общим состоянием — например, после выполнения операции перемещения, — get_future() приводит к IsoStdFutureErrcNoStateViolation[SWS_CORE_00344]. Методы set_value, SetError и SetResult вызывают в этом случае нарушение PromiseNoSharedStateToSetViolation ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Безопасность исключений: методы set_value, SetError и SetResult обладают условной безопасностью исключений (conditionally exception safe). Они не генерируют исключений, если конструкторы типов T и E объявлены как nothrow ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Интерпретация: отказ от общего состояния при уничтожении экземпляра без предварительного присваивания значения ([SWS_CORE_00349]), по-видимому, по аналогии со стандартным поведением C++ для std::promise приводит к тому, что ассоциированный Future при попытке чтения регистрирует соответствующее событие ошибки. Вопрос Q-fd013bb17a591af9 (открытый)
Данное руководство основано исключительно на требованиях спецификации AUTOSAR Adaptive (релиз R25-11).
Return an associated Future with the same shared state as *this The returned Future is set as soon as this Promise receives the result, value, or an error. This fuction must only be called once as it is not allowed to have multiple Futures per Promise.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
error
the error to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
error
the error to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
result
the result to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
result
the result to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
Return an associated Future with the same shared state as *this The returned Future is set as soon as this Promise receives the result, value, or an error. This fuction must only be called once as it is not allowed to have multiple Futures per Promise.
IsoStdFutureErrc- If the function is called more than once on the same shared FutureAlreadyRe- state. trievedViolation IsoStdFutureErrc- If *this has no shared state. NoStateViolation
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
value
the value to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
IsoStdFutureEr- If the shared state already has a stored value or error. rcPromiseAl- readySatisfiedVio- lation PromiseNoShared- If *this has no shared state. StateToSetViola- tion
Parameter (in)
Parameter
Beschreibung
value
the value to store
Rückgabewert
Typ
Beschreibung
None
Request a governed re-review of this record. The record is not changed immediately.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал