std::timed_mutex::try_lock_until
template<class Clock, class Duration > bool try_lock_until(conststd::chrono::time_point<Clock,Duration>& timeout_time ); | (desde C++11) | |
Intenta bloquear el mutex. Bloquea hasta que se alcanza el tiempo de espera timeout_time
especificado o se adquiere el bloqueo, lo que ocurra primero. En la adquisición exitosa del cerrojo, devuelve true; de lo contrario, devuelve false.
Si timeout_time
ya pasó, esta función se comporta como try_lock().
Clock
debe cumplir con los requerimientos de Clock. El programa está mal formado si std::chrono::is_clock_v<Clock> es false(desde C++20).
El estándar recomienda que se utilice el reloj vinculado a timeout_time
, en cuyo caso se pueden tener en cuenta los ajustes del reloj. Por lo tanto, la duración del bloqueo puede ser menor o mayor que timeout_time - Clock::now() en el momento de la llamada, pero podría no serlo, dependiendo de la dirección del ajuste y si es respetado por la implementación. La función también puede bloquearse por más tiempo que hasta después de que se haya alcanzado timeout_time
debido a demoras en la programación o en la contención de recursos.
Al igual que con try_lock(), esta función puede fallar falsamente (spuriously) y devolver false incluso si el mutex no fue bloqueado por ningún otro hilo en algún momento antes del tiempo de espera timeout_time
.
Una operación unlock() previa en el mismo mutex se sincroniza-con (como se define en std::memory_order) esta operación si devuelve true.
Si try_lock_until
es llamada por un hilo que ya posee el mutex
, el comportamiento no está definido.
Contenido |
[editar]Parámetros
timeout_time | - | Punto de tiempo máximo hasta el cual bloquearse. |
[editar]Valor de retorno
true Si el bloqueo se adquirió exitosamente, de lo contrario, false.
[editar]Excepciones
Cualquier excepción lanzada por el reloj, punto de tiempo o duración usados para medir durante la ejecución (los relojes, puntos de tiempo y duraciones proporcionadas por la biblioteca estándar nunca lanzan).
[editar]Ejemplo
Este ejemplo muestra un bloqueo de 10 segundos
#include <thread>#include <iostream>#include <chrono>#include <mutex> std::timed_mutex test_mutex; void f(){auto now=std::chrono::steady_clock::now(); test_mutex.try_lock_until(now +std::chrono::seconds(10));std::cout<<"hola mundo\n";} int main(){std::lock_guard<std::timed_mutex> l(test_mutex);std::thread t(f); t.join();}
[editar]Véase también
Bloquea el mutex; se bloquea si el mutex no está disponible (función miembro pública) | |
Intenta bloquear el mutex; regresa si el mutex no está disponible (función miembro pública) | |
Intenta bloquear el mutex; regresa si el mutex no ha estado disponible durante el tiempo de espera especificado (función miembro pública) | |
Desbloquea el mutex (función miembro pública) | |
Documentación de C para mtx_timedlock |