Namespaces
Variants

C++ named requirements: SharedMutex (since C++17)

From cppreference.net
C++ named requirements

Los requisitos de SharedMutex extienden los requisitos de Mutex para incluir el modo de propiedad de bloqueo compartido.

Requisitos

Además, un objeto m de tipo SharedMutex admite otro modo de propiedad: compartida. Múltiples hilos (o, más generalmente, agentes de ejecución) pueden poseer simultáneamente este mutex en modo compartido, pero ningún hilo puede obtener propiedad compartida si hay un hilo que lo posee en modo exclusivo y ningún hilo puede obtener propiedad exclusiva si hay un hilo que lo posee en modo compartido. Si más del número definido por la implementación de hilos (no menos de 10000) mantienen un bloqueo compartido, otro intento de adquirir el mutex en modo compartido se bloquea hasta que el número de propietarios compartidos descienda por debajo de ese umbral.

  • La expresión m. lock_shared ( ) tiene las siguientes propiedades:
  • Se comporta como una operación atómica.
  • Bloquea el hilo de llamada hasta que se pueda obtener la propiedad compartida del mutex.
  • Las operaciones previas m. unlock ( ) en el mismo mutex sincronizan-con esta operación de bloqueo (equivalente a liberación-adquisición std::memory_order ).
  • El comportamiento es indefinido si el hilo de llamada ya posee el mutex en cualquier modo.
  • Si se lanza una excepción, el bloqueo compartido no se adquiere.
  • La expresión m. try_lock_shared ( ) tiene las siguientes propiedades:
  • Se comporta como una operación atómica.
  • Intenta obtener la propiedad compartida del mutex para el hilo de ejecución actual sin bloquear. Si no se obtiene la propiedad, retorna inmediatamente. Se permite que la función falle espuriamente y retorne incluso si el mutex no está actualmente en propiedad de ningún hilo en ningún modo.
  • Si try_lock_shared() tiene éxito, las operaciones previas de unlock() en el mismo objeto sincronizan-con esta operación (equivalente a liberación-adquisición std::memory_order ).
  • El comportamiento es indefinido si el hilo de ejecución actual ya posee el mutex en cualquier modo.
  • La expresión m. unlock_shared ( ) tiene las siguientes propiedades:
  • Se comporta como una operación atómica.
  • Libera la propiedad del mutex del hilo que realiza la llamada y sincroniza-con las posteriores operaciones de bloqueo exitosas en el mismo objeto.
  • El comportamiento es indefinido si el hilo que realiza la llamada no posee el mutex.
  • Todas las operaciones de bloqueo y desbloqueo en un único mutex ocurren en un único orden total.

Biblioteca estándar

Los siguientes tipos de la biblioteca estándar satisfacen los requisitos de SharedMutex :

proporciona funcionalidad de exclusión mutua compartida
(clase)
proporciona funcionalidad de exclusión mutua compartida e implementa bloqueo con tiempo de espera
(clase)

Véase también