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().
Permite el acceso seguro para subprocesos a almacenamientos de archivos y de clave-valor a través de los límites entre subprocesos.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 7420a4e54761ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Permite el acceso seguro para subprocesos a almacenamientos de archivos y de clave-valor a través de los límites entre subprocesos.
La clase plantilla ara::per::SharedHandle sirve como abstracción de puntero inteligente para almacenamientos de archivos y de clave-valor, con el fin de permitir un acceso seguro para subprocesos a través de los límites entre subprocesos. Tras obtenerlo mediante funciones de fábrica, debe comprobarse el estado de validez del handle a través de operator bool()[SWS_PER_00398], ya que invocar otros operadores sobre un handle vacío o invalidado por operaciones de movimiento conduce a un comportamiento indefinido. Mientras que la desreferenciación hacia el objeto encapsulado es segura para subprocesos, las asignaciones y la destrucción del handle [SWS_PER_00568] sobre la misma instancia requieren sincronización externa.
Contexto
La clase plantilla ara::per::SharedHandle representa en el módulo per (Persistency) de AUTOSAR Adaptive Platform una abstracción de puntero inteligente para recursos de almacenamiento persistente. Sirve como tipo de retorno estandarizado de las funciones de fábrica OpenFileStorage() y OpenKeyValueStorage(). La responsabilidad principal de la clase es coordinar el acceso a almacenamientos de archivos y de clave-valor a través de los límites entre subprocesos y proporcionar la encapsulación necesaria para permitir una implementación segura para subprocesos de las rutinas de apertura y acceso al almacenamiento. Los interlocutores son hilos de trabajo del lado de la aplicación, la gestión de persistencia y el respectivo recurso de almacenamiento encapsulado T.
Ciclo de vida
Un SharedHandle se origina típicamente al abrir una instancia de almacenamiento mediante las interfaces de fábrica de per. Mediante el constructor de copia [SWS_PER_00369] y el operador de asignación por copia [SWS_PER_00370], el handle puede duplicarse, con lo cual múltiples instancias de handle obtienen acceso compartido al mismo objeto de destino. Si un handle se transfiere mediante el constructor de movimiento [SWS_PER_00367] o la asignación por movimiento [SWS_PER_00368], el handle de origen pasa a un estado invalidado y ya no debe utilizarse para accesos al almacenamiento.
El operador de conversión explícita operator bool()[SWS_PER_00398] determina el estado actual del handle: devuelve true si se hace referencia a una instancia de almacenamiento válida, y false si el handle está vacío. La liberación de los recursos del handle se realiza a través del destructor ~SharedHandle()[SWS_PER_00568]. Interpretación: es probable que el recurso de almacenamiento subyacente se libere tan pronto como se destruya el último SharedHandle que lo referencie. Pregunta Q-00a1798cf43e0ee6 (abierta)
Con respecto a la concurrencia, los accesos al recurso encapsulado a través de operator* ([SWS_PER_00402], [SWS_PER_00403]) y operator-> ([SWS_PER_00363], [SWS_PER_00364]), así como la consulta de estado mediante operator bool()[SWS_PER_00398], son seguros para subprocesos. En cambio, las operaciones de asignación sobre el mismo handle ([SWS_PER_00368], [SWS_PER_00370]) y su destrucción [SWS_PER_00568] no son seguras para subprocesos y requieren sincronización externa en caso de uso compartido del handle.
Fin del ciclo de vida: al salir del ámbito de validez, el destructor [SWS_PER_00568] desmantela el handle.
Diagrama de secuencia: flujo de obtención, comprobación de validez, llamada a métodos y desmantelamiento de un SharedHandle. Fuentes: [SWS_PER_00363], [SWS_PER_00398], [SWS_PER_00568]
Escenarios de error
Los estados de error críticos se producen primordialmente ante operaciones no permitidas sobre handles vacíos o invalidados. Según [SWS_PER_00398], la llamada a cualquier operador excepto operator bool() sobre un handle vacío conduce de forma inmediata a un comportamiento indefinido (Undefined Behavior). Esto afecta especialmente a handles de origen tras una construcción por movimiento [SWS_PER_00367] o una asignación por movimiento [SWS_PER_00368], ya que estos se invalidan y no deben seguir utilizándose.
Para evitar comportamientos indefinidos, la especificación exige de manera vinculante la comprobación del estado del handle a través de operator bool() antes de llamar a otros operadores ([SWS_PER_00367], [SWS_PER_00368]). Todos los constructores, operadores de asignación, operadores de acceso y el destructor están declarados como noexcept y especificados como seguros ante excepciones («exception safe») ([SWS_PER_00367], [SWS_PER_00368], [SWS_PER_00369], [SWS_PER_00370], [SWS_PER_00363], [SWS_PER_00364], [SWS_PER_00402], [SWS_PER_00403], [SWS_PER_00398], [SWS_PER_00568]). Por tanto, un estado inválido no desencadena una excepción, sino que el llamador debe interceptarlo obligatoriamente mediante el valor de retorno de operator bool().
Esta guía se basa en la especificación AUTOSAR para el módulo per (Adaptive Platform, Release R25-11) y fue creada por un asistente de curación mediante IA.
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 en alemán