template <typename T> class SharedHandle final {...};
Handle to a File Storage or Key-Value Storage. A SharedHandle is returned by the functions OpenFileStorage() and OpenKeyValueStorage() and can be passed between threads as needed. It provides the abstraction that is necessary to allow thread-safe implementation of OpenFile Storage() and OpenKeyValueStorage().
Permet l'accès thread-safe aux stockages de fichiers et de clés-valeurs à travers les frontières de threads.
GÉNÉRÉ PAR IAnon vérifiéModèle : gemini-3.8-flash-medium · Effort : medium · Température : non réglable · Prompt : 7420a4e54761ProvenanceQuestions ouvertes (1)
traduit du guide allemandgemini-3.8-flash-low · 2026-10-13 · Original allemand
Permet l'accès thread-safe aux stockages de fichiers et de clés-valeurs à travers les frontières de threads.
La classe template ara::per::SharedHandle sert d'abstraction de pointeur intelligent pour les stockages de fichiers et de clés-valeurs afin de permettre un accès thread-safe à travers les frontières de threads. Après obtention via des fonctions fabriques, l'état de validité du handle doit être vérifié via operator bool()[SWS_PER_00398], car l'appel d'autres opérateurs sur un handle vide ou invalidé par des opérations de déplacement conduit à un comportement indéfini. Alors que le déréférencement vers l'objet encapsulé est thread-safe, les affectations et la destruction du handle [SWS_PER_00568] sur la même instance requièrent une synchronisation externe.
Contexte
La classe template ara::per::SharedHandle représente, dans le module per (Persistency) de l'AUTOSAR Adaptive Platform, une abstraction de pointeur intelligent pour les ressources de stockage persistantes. Elle sert de type de retour standardisé des fonctions fabriques OpenFileStorage() et OpenKeyValueStorage(). La responsabilité principale de la classe est de coordonner l'accès aux stockages de fichiers et de clés-valeurs à travers les frontières de threads et de fournir l'encapsulation requise afin de permettre une implémentation thread-safe des routines d'ouverture et d'accès au stockage. Les partenaires d'interaction sont les fils d'exécution applicatifs, la gestion de la persistance ainsi que la ressource de stockage encapsulée respective T.
Cycle de vie
Un SharedHandle prend typiquement naissance lors de l'ouverture d'une instance de stockage via les interfaces fabriques de per. Grâce au constructeur de copie [SWS_PER_00369] ainsi qu'à l'opérateur d'affectation par copie [SWS_PER_00370], le handle peut être dupliqué, ce qui donne à plusieurs instances de handle un accès partagé au même objet cible. Si un handle est transféré au moyen d'un constructeur de déplacement [SWS_PER_00367] ou d'une affectation par déplacement [SWS_PER_00368], le handle source passe dans un état invalidé et ne doit plus être utilisé pour les accès au stockage.
L'opérateur de conversion explicite operator bool()[SWS_PER_00398] détermine l'état actuel du handle : il renvoie true lorsqu'une instance de stockage valide est référencée, et false lorsque le handle est vide. La libération des ressources du handle s'effectue via le destructeur ~SharedHandle()[SWS_PER_00568]. Interprétation : la ressource de stockage sous-jacente devrait être libérée dès que le dernier SharedHandle référençant est détruit. Question Q-00a1798cf43e0ee6 (ouverte)
En ce qui concerne la concurrence, les accès à la ressource encapsulée via operator* ([SWS_PER_00402], [SWS_PER_00403]) et operator-> ([SWS_PER_00363], [SWS_PER_00364]) ainsi que l'interrogation d'état via operator bool()[SWS_PER_00398] sont thread-safe. En revanche, les opérations d'affectation sur le même handle ([SWS_PER_00368], [SWS_PER_00370]) et sa destruction [SWS_PER_00568] ne sont pas thread-safe et requièrent une synchronisation externe en cas d'utilisation partagée du handle.
Fin de cycle de vie : lors de la sortie de la portée, le destructeur [SWS_PER_00568] libère le handle.
Diagramme de séquence : déroulement de l'obtention, du contrôle de validité, de l'appel de méthode et de la libération d'un SharedHandle. Sources : [SWS_PER_00363], [SWS_PER_00398], [SWS_PER_00568]
Scénarios d'erreur
Des états d'erreur critiques surviennent principalement lors d'opérations non autorisées sur des handles vides ou invalidés. Selon [SWS_PER_00398], l'appel de n'importe quel opérateur hormis operator bool() sur un handle vide conduit immédiatement à un comportement indéfini (Undefined Behavior). Cela concerne en particulier les handles sources après une construction par déplacement [SWS_PER_00367] ou une affectation par déplacement [SWS_PER_00368], car ceux-ci sont invalidés et ne doivent plus être utilisés.
Move constructor for SharedHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Move assignment operator for SharedHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Handle state. True if the handle represents a valid object of the templated class, False if the handle is empty (e.g. after a move operation). Using other operators than bool() of an empty handle will result in undefined behavior.
Move constructor for SharedHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Move assignment operator for SharedHandle. The source handle object is invalidated and cannot be used anymore. The operator bool() shall be used to check the state of a handle object before using any other operators of the handle object.
Handle state. True if the handle represents a valid object of the templated class, False if the handle is empty (e.g. after a move operation). Using other operators than bool() of an empty handle will result in undefined behavior.
gemini-3.8-flash-low· 2026-10-13 · Original allemand