std::timed_mutex::try_lock_until
template< class Clock, class Duration > bool try_lock_until( const std::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.
Parámetros
| timeout_time | - | Punto de tiempo máximo hasta el cual bloquearse. |
Valor de retorno
true Si el bloqueo se adquirió exitosamente, de lo contrario, false.
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).
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();
}
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
| |