Proporciona un canal asíncrono para transferir valores o errores entre hilos a un Future asociado.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 5c323bf911dfProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Proporciona un canal asíncrono para transferir valores o errores entre hilos a un Future asociado.
La clase ara::core::Promise actúa como extremo de escritura asíncrono para transferir valores, errores o resultados entre hilos a un estado compartido [SWS_CORE_00341]. El acceso de lectura se realiza a través de un Future recuperable exactamente una vez, el cual se libera al suministrarse el resultado [SWS_CORE_00344]. Dado que la clase no es copiable, el estado permanece estrictamente en posesión unívoca mediante semántica de movimiento, provocando violaciones estandarizadas si se establece el resultado varias veces o se recupera el Future repetidamente.
Contexto
La clase ara::core::Promise representa la variante específica de Adaptive Platform del concepto std::promise conocido del estándar C++. Está definida en el encabezado ara/core/future.h como plantilla Promise<T, E = ErrorCode> y sirve como extremo de escritura asíncrono de un estado compartido (shared state). A través de este canal, un productor transfiere entre hilos un valor de salida calculado, un error o un ara::core::Result agregado. La parte receptora correspondiente accede al resultado mediante un ara::core::Future asociado, el cual se recupera a través del método de instancia get_future[SWS_CORE_00344]. A diferencia del mecanismo estándar de C++, que se basa principalmente en excepciones, AUTOSAR Adaptive afianza el paradigma tipificado por errores: si se elige un tipo de error E distinto de ara::core::ErrorCode, la especificación impone un error de compilación.
Ciclo de vida
Una instancia se crea regularmente a través del constructor predeterminado sin parámetros, el cual se comporta igual que el constructor correspondiente de std::promise, es seguro para hilos y establece un nuevo estado compartido [SWS_CORE_00341]. Para garantizar relaciones de propiedad unívocas sobre este estado, las operaciones de copia están completamente prohibidas: tanto el constructor de copia [SWS_CORE_00350] como el operador de asignación por copia [SWS_CORE_00351] están declarados como eliminados (delete).
Sin embargo, la clase admite semántica de movimiento (move). El constructor de movimiento asume el estado compartido de la instancia de origen [SWS_CORE_00342]. En una asignación por movimiento, la instancia de destino renuncia a su estado compartido previo y asume el estado del objeto transferido de forma análoga a una operación de intercambio [SWS_CORE_00343]. Además, el método swap permite intercambiar el estado interno con otra instancia [SWS_CORE_00352]. Al destruirse mediante el destructor, se libera o se abandona un estado compartido que aún se retenga [SWS_CORE_00349]. Mientras que el constructor predeterminado está diseñado para ser seguro para hilos [SWS_CORE_00341], las operaciones de movimiento, las asignaciones, el intercambio (swap) y la destrucción no son seguros para hilos ([SWS_CORE_00342], [SWS_CORE_00343], [SWS_CORE_00352], [SWS_CORE_00349]).
Un flujo típico de provisión comprende los siguientes pasos:
Creación: el productor instancia un ara::core::Promise<T, E>[SWS_CORE_00341].
Recuperar Future: antes de iniciar el procesamiento asíncrono, el productor llama a get_future()[SWS_CORE_00344]. Dado que por cada Promise solo se permite un único Future asociado, esta llamada debe realizarse exactamente una vez. El Future devuelto se transfiere al hilo consumidor.
Establecer resultado: tras concluir la operación asíncrona, el productor transfiere el resultado al estado compartido y sitúa a este en el estado ready. Para ello dispone de sobrecargas seguras para hilos tanto para operaciones de copia como de movimiento:
La especificación define precondiciones estrictas para todas las interacciones con el estado compartido, cuyo incumplimiento conduce a violaciones estandarizadas (Violations):
Recuperación múltiple del Future: si se llama a get_future() más de una vez para el mismo estado compartido, se produce la violación IsoStdFutureErrcFutureAlreadyRetrievedViolation[SWS_CORE_00344].
Ausencia de Shared State: si la instancia llamada no posee un estado compartido —por ejemplo, tras realizar una operación de movimiento—, get_future() da lugar a IsoStdFutureErrcNoStateViolation[SWS_CORE_00344]. En este caso, los métodos set_value, SetError y SetResult desencadenan la violación PromiseNoSharedStateToSetViolation ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Seguridad ante excepciones: los métodos set_value, SetError y SetResult ofrecen seguridad condicional ante excepciones (conditionally exception safe). No lanzan excepciones, siempre que los constructores de los tipos T y E estén declarados como nothrow ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Interpretación: el abandono del estado compartido durante la destrucción de la instancia sin una asignación previa de valor ([SWS_CORE_00349]) debería conllevar, de forma análoga al comportamiento estándar de C++ de std::promise, que un Future asociado registre el correspondiente evento de error al intentar la lectura. Pregunta Q-fd013bb17a591af9 (abierta)
Esta guía se basa exclusivamente en los requisitos de especificación de AUTOSAR Adaptive (Release 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 · Original en alemán