Espacios de nombres
Variantes

std::timed_mutex::try_lock_until

De cppreference.com

[edit template]
 
 
Biblioteca de apoyo de concurrencia
Hilos
(C++11)
(C++20)
Espacio de nombres this_thread
(C++11)
(C++11)
(C++11)
Cancelación cooperativa
Exclusión mutua
(C++11)
Gestión genérica de bloqueo
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Variables de condición
(C++11)
Semáforos
Pestillos y barreras
(C++20)
(C++20)
Futuros
(C++11)
(C++11)
(C++11)
(C++11)
Recuperación segura
(C++26)
Punteros de riesgo
Tipos atómicos
(C++11)
(C++20)
Inicialización de tipos atómicos
(C++11)(en desuso en C++20)
(C++11)(en desuso en C++20)
Orden de memoria
Funciones independientes para operaciones atómicas
Funciones independientes para indicadores atómicos
 
 
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) [editar]
Intenta bloquear el mutex; regresa si el mutex no está disponible
(función miembro pública) [editar]
Intenta bloquear el mutex; regresa si el mutex no ha estado
disponible durante el tiempo de espera especificado
(función miembro pública) [editar]
Desbloquea el mutex
(función miembro pública) [editar]
Documentación de C para mtx_timedlock