AUTOSAR_EXP_ARAComAPI
FIG-cf031827703495c0
962 × 1108 px
1 Release(s)
Figure 6.14: Future
SHA-256 Inhalts-Fingerabdruck:
cf031827703495c0f79f40b88581a011ac90a4398ea76376aec33f6443fac146
✦
KI-generierte Bildanalyse & technische Beschreibung
Modell: gemini-3.8-flash (via agy) · Rezept figure-series@1 · erstellt am 2026-10-08
1. Diagrammtyp & Architektur-Kontext
- Diagrammtyp: Formale C++-Klassenschnittstellendeklaration (Header-Code-Spezifikation) der Template-Klasse
ara::com::Future<T>. - Architektur-Kontext: AUTOSAR Adaptive Platform (ARA), Subsystem Communication Management (
ara::com), Method Call Pattern. - Funktionale Einordnung: Repräsentiert das konsumierende Leseende (Consumer/Client) eines asynchronen Methodenaufrufs. Es kapselt den geteilten Zustand (Shared State), dessen schreibendes Gegenstück (
ara::com::Promise<T>) auf Anbieter- bzw. Binding-Ebene liegt, und synchronisiert Resultats- oder Ausnahmeübergaben zwischen Producer und Consumer.
2. Komponenten, Entitäten & Schnittstellen
- Klassendefinition: Template
Future<T>(Werteklasse für asynchrone Rückgaben des TypsT). - Ressourcen- und Lifecycle-Management (Move-Only Semantics):
- Copy-Operationen explizit unterbunden:
Future(const Future&) = delete;,operator=(const Future&) = delete;. - Move-Semantik garantiert Allokations- und Eigentümertransfer ohne Exceptions:
Future(Future&&) noexcept;,operator=(Future&&) noexcept;(im Code mit Kommentar/** movable */deklariert).
- Copy-Operationen explizit unterbunden:
- Standardisierte C++11/C++14-Schnittstellen (
std::future-kompatibel):T get(): Synchrone Entnahme des Werts; blockiert bis zur Bereitstellung. Invalidiert den internen Shared State für Folgeabfragen.bool valid() const: Prüft, ob die Instanz mit einem Shared State assoziiert ist.void wait() const: Blockiert den Aufruferthread bis zum Eintreffen von Daten oder Fehlern.template<class Rep, class Period> FutureStatus wait_for(const std::chrono::duration<Rep,Period>& timeout_duration) const: Relatives, zeitbegrenztes Warten mit Statusrückgabe (FutureStatus::ready,timeout).template<class Clock, class Duration> FutureStatus wait_until(const std::chrono::time_point<Clock,Duration>& abs_time) const: Absolutes Frist-Warten.
- Erweiterte Asynchronie-Schnittstellen (angelehnt an C++ Concurrency TS N3857):
template <typename F> auto then(F&& func) -> Future<decltype(func(*this))>: Registrierung einer Continuation. Nimmt ein Callablefuncentgegen, welches das dereferenzierte Future (*this) als Parameter erhält. Erzeugt ein neues Folge-Futurefür Verkettungen.bool is_ready() const: Nicht-blockierende Statusabfrage zur Prüfung auf Vorhandensein eines Ergebnisses oder einer Exception.
3. Dynamisches Verhalten & Sequenzablauf
- Synchroner Abrufpfad (Polling / Blocking):
- Client initiiert RPC-Aufruf via Proxy und erhält sofort
Future<T>. - Client ruft
is_ready()(zyklischer Check) oderwait()/wait_for()/wait_until()auf. - Nach Transition in den Zustand
readyruft der Clientget(). Der Rückgabewert wird gemovt/kopiert; der interne Zustand wird detacht.
- Client initiiert RPC-Aufruf via Proxy und erhält sofort
- Reaktiver Pfad (Event-driven Continuation via
then):- Client registriert Lambda/Funktor via
then(F&& func). - Ausführungskontext von
func:- Bereits fertig: Wird unmittelbar im Kontext des
then()-Aufrufs ausgeführt. - Noch ausstehend: Wird im Kontext des Produzenten (
Promise::set_value(),Promise::set_exception()) oder durch einen Thread-Pool des Middleware-Bindings ausgeführt.
- Bereits fertig: Wird unmittelbar im Kontext des
- Invariante: Beim Eintritt in
funcistis_ready() == true; ein darin abgesetztesget()blockiert garantiert nicht mehr.
- Client registriert Lambda/Funktor via
- Fehler- und Abbruchpfad:
- Schlägt der Remote-Methodenaufruf fehl, persistiert das Binding eine Exception im Shared State.
is_ready()wirdtrue.- Der Aufruf von
get()re-triggert die gespeicherte Exception im Kontext des abrufenden Threads.
4. Normative Relevanz & Entwickler-Hinweise
- Thread-Safety & Deadlock-Vermeidung: Da der Ausführungskontext von
then()nicht deterministisch auf den Aufrufer-Thread festgelegt ist, dürfen Continuations keine ungeschützten lokalen Thread-Ressourcen capturen und keine rekursiven Locks auf Mutexe anfordern, die im Producer-Kontext gehalten werden. - Single-Consumer-Restriktion: Durch das Löschen des Copy-Konstruktors kann ein
Futurenicht auf mehrere Threads parallel verteilt werden (std::shared_future-Semantik wird hier nicht bereitgestellt). Für Multiple-Consumer-Szenarien muss das Ergebnis manuell nachget()propagiert werden. - Spezifikatorische Evolution (R17-03 / R17-10 vs. Folge-Releases):
- In den Releases R17-03 und R17-10 stützt sich das Fehlerkonzept primär auf C++-Exceptions (
Promise::set_exception). - Architektur-Hinweis für Adaptive-Entwickler: In späteren Releases (ab R18-03 bzw. R19-11) wurde das Exception-basierte Modell durch
ara::core::Result<T, E>abgelöst.ara::core::Futurearbeitet seither weitgehend exception-frei und liefert Typen wieara::core::Result<T>zurück, um den Safety-Anforderungen (MISRA C++:2008 / AUTOSAR C++14 Rule A15-0-X bezüglich Determinismus im Stack-Unwinding) zu genügen.
- In den Releases R17-03 und R17-10 stützt sich das Fehlerkonzept primär auf C++-Exceptions (
Zugeordnete Anforderungen
Diese Angaben zeigt der Versions-Explorer.