Disponibiliza um canal assíncrono para transferir valores ou erros entre threads para um Future associado.
GERADO POR IAnão revisadoModelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 5c323bf911dfProcedênciaPerguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão
Disponibiliza um canal assíncrono para transferir valores ou erros entre threads para um Future associado.
A classe ara::core::Promise atua como endpoint de escrita assíncrono para transferir valores, erros ou resultados entre threads para um estado partilhado [SWS_CORE_00341]. O acesso de leitura é realizado através de um Future recuperável exatamente uma vez, o qual é libertado aquando da disponibilização do resultado [SWS_CORE_00344]. Como a classe não é copiável, o estado permanece estritamente na posse exclusiva através de semântica de movimento (move semantics), sendo que uma definição múltipla do resultado ou a recuperação múltipla do future conduz a violações padronizadas.
Contexto
A classe ara::core::Promise representa a forma específica da Adaptive Platform do conceito std::promise conhecido do padrão C++. Está definida no cabeçalho ara/core/future.h como template Promise<T, E = ErrorCode> e serve como endpoint de escrita assíncrono de um estado partilhado (shared state). Através deste canal, um produtor transfere entre threads ou um valor de saída calculado, um erro ou um ara::core::Result agregado. O lado recetor correspondente acede ao resultado através de um ara::core::Future associado, o qual é recuperado através do método de instância get_future[SWS_CORE_00344]. Ao contrário do mecanismo padrão de C++, que se baseia primariamente em exceções, a AUTOSAR Adaptive ancora o paradigma tipificado por erro: se o tipo de erro E for escolhido diferente de ara::core::ErrorCode, a especificação força um erro de compilação.
Ciclo de vida
Uma instância é criada regularmente através do construtor padrão sem parâmetros, que se comporta como o construtor correspondente de std::promise, é seguro para threads e estabelece um novo estado partilhado [SWS_CORE_00341]. Para garantir relações de posse inequívocas sobre este estado, as operações de cópia são totalmente proibidas: tanto o construtor de cópia [SWS_CORE_00350] como o operador de atribuição por cópia [SWS_CORE_00351] estão declarados como eliminados (delete).
No entanto, a classe suporta semântica de movimento (Move). O construtor de movimento assume o estado partilhado da instância de origem [SWS_CORE_00342]. Numa atribuição por movimento, a instância de destino descarta o seu estado partilhado anterior e assume o estado do objeto transmitido de forma análoga a uma operação de troca [SWS_CORE_00343]. Adicionalmente, o método swap permite a troca do estado interno com outra instância [SWS_CORE_00352]. Na destruição através do destrutor, um estado partilhado ainda mantido é libertado ou abandonado [SWS_CORE_00349]. Enquanto o construtor padrão é concebido para ser seguro para threads [SWS_CORE_00341], as operações de movimento, as atribuições, o swap e a destruição não são seguros para threads ([SWS_CORE_00342], [SWS_CORE_00343], [SWS_CORE_00352], [SWS_CORE_00349]).
Um fluxo típico de disponibilização compreende os seguintes passos:
Criação: O produtor instancia um ara::core::Promise<T, E>[SWS_CORE_00341].
Recuperar Future: Antes de iniciar o processamento assíncrono, o produtor chama get_future()[SWS_CORE_00344]. Como por cada Promise apenas é permitido um único Future associado, esta chamada só pode ocorrer exatamente uma vez. O Future retornado é transmitido à thread consumidora.
Definir resultado: Após a conclusão da operação assíncrona, o produtor transfere o resultado para o estado partilhado e coloca-o no estado ready. Para tal, estão disponíveis sobrecargas seguras para threads para operações de cópia e de movimento:
A especificação define pré-condições estritas para todas as interações com o estado partilhado, cujo incumprimento conduz a violações padronizadas (Violations):
Recuperação múltipla do Future: Se get_future() for chamado mais de uma vez para o mesmo estado partilhado, ocorre a violação IsoStdFutureErrcFutureAlreadyRetrievedViolation[SWS_CORE_00344].
Shared State em falta: Se a instância chamada não possuir um estado partilhado – por exemplo, após a realização de uma operação de movimento –, get_future() resulta em IsoStdFutureErrcNoStateViolation[SWS_CORE_00344]. Os métodos set_value, SetError e SetResult despoletam, neste caso, a violação PromiseNoSharedStateToSetViolation ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Segurança contra exceções: Os métodos set_value, SetError e SetResult são condicionalmente seguros contra exceções (conditionally exception safe). Não lançam exceções, desde que os construtores dos tipos T e E estejam declarados como nothrow ([SWS_CORE_00345], [SWS_CORE_00353], [SWS_CORE_00355]).
Interpretação: O abandono do estado partilhado aquando da destruição da instância sem atribuição prévia de valor ([SWS_CORE_00349]) deverá, de forma análoga ao comportamento padrão C++ de std::promise, fazer com que um Future associado registe um evento de erro correspondente ao tentar a leitura. Pergunta Q-fd013bb17a591af9 (aberta)
Este guia baseia-se exclusivamente nos requisitos de especificação da 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 em alemão