Namespaces
Variants

C++ named requirements: TimedMutex (since C++11)

From cppreference.net
C++ named requirements

Los TimedMutex requisitos extienden los TimedLockable requisitos para incluir sincronización entre hilos.

Contenidos

Requisitos

Además, para un objeto m de tipo TimedMutex :

  • La expresión m. try_lock_for ( duration ) tiene las siguientes propiedades
  • Se comporta como una operación atómica.
  • Intenta obtener la propiedad exclusiva del mutex dentro del tiempo especificado por duration . Si duration es menor o igual a duration.zero() , intenta obtener la propiedad sin bloquear (como si fuera mediante try_lock() ). De lo contrario, esta función se bloquea hasta que el mutex sea adquirido o hasta que pase el tiempo especificado por duration . Retorna dentro de duration solo si tiene éxito, pero se le permite fallar en adquirir el mutex incluso si en algún momento durante duration no estaba siendo poseído por otro hilo. En cualquier caso, retorna true si el mutex fue adquirido y false en caso contrario.
  • Si try_lock_for(duration) 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 que llama ya posee el mutex (excepto si m es std::recursive_timed_mutex ).
  • Puede lanzarse una excepción por el reloj, punto temporal o duración durante la ejecución (los relojes, puntos temporales y duraciones proporcionados por la biblioteca estándar nunca lanzan excepciones).
  • La expresión m. try_lock_until ( time_point ) tiene las siguientes propiedades
  • Se comporta como una operación atómica.
  • Intenta obtener la propiedad exclusiva del mutex dentro del tiempo restante hasta time_point . Si time_point ya pasó, intenta obtener la propiedad sin bloquear (como si fuera mediante try_lock() ). De lo contrario, esta función se bloquea hasta que se adquiera el mutex o hasta que pase el tiempo especificado por time_point . Retorna antes de time_point solo si tiene éxito, pero se le permite fallar en adquirir el mutex incluso si en algún momento antes de time_point no era propiedad de otro hilo. En cualquier caso, retorna true si el mutex fue adquirido y false en caso contrario.
  • Si try_lock_until(time_point) 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 que llama ya es propietario del mutex (excepto si m es std::recursive_timed_mutex ).
  • Puede lanzarse una excepción por el reloj, punto temporal o duración durante la ejecución (los relojes, puntos temporales y duraciones proporcionados por la biblioteca estándar nunca lanzan excepciones).

Biblioteca estándar

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

proporciona un mecanismo de exclusión mutua que puede ser bloqueado recursivamente
por el mismo hilo e implementa bloqueo con tiempo de espera
(clase)
proporciona un mecanismo de exclusión mutua compartida e implementa bloqueo con tiempo de espera
(clase)
proporciona un mecanismo de exclusión mutua que implementa bloqueo con tiempo de espera
(clase)

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2093 C++11 faltaban excepciones relacionadas con timeout en la especificación mencionadas

Véase también