C++ named requirements: TimedMutex (since C++11)
From cppreference.net
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. Sidurationes menor o igual aduration.zero(), intenta obtener la propiedad sin bloquear (como si fuera mediantetry_lock()). De lo contrario, esta función se bloquea hasta que el mutex sea adquirido o hasta que pase el tiempo especificado porduration. Retorna dentro dedurationsolo si tiene éxito, pero se le permite fallar en adquirir el mutex incluso si en algún momento durantedurationno 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 deunlock()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. Sitime_pointya pasó, intenta obtener la propiedad sin bloquear (como si fuera mediantetry_lock()). De lo contrario, esta función se bloquea hasta que se adquiera el mutex o hasta que pase el tiempo especificado portime_point. Retorna antes detime_pointsolo si tiene éxito, pero se le permite fallar en adquirir el mutex incluso si en algún momento antes detime_pointno 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 deunlock()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 :
|
(C++11)
|
proporciona un mecanismo de exclusión mutua que puede ser bloqueado recursivamente
por el mismo hilo e implementa bloqueo con tiempo de espera (clase) |
|
(C++14)
|
proporciona un mecanismo de exclusión mutua compartida e implementa bloqueo con tiempo de espera
(clase) |
|
(C++11)
|
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 |