Espacios de nombres
Variantes
Acciones

std::unique_lock::lock

De cppreference.com
< cpp‎ | thread‎ | unique lock
 
 
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
 
 
void lock();
(desde C++11)

Bloquea el mutex asociado (es decir, toma posesión). Efectivamente llama a mutex()->lock().

Contenido

[editar] Parámetros

(Ninguno)

[editar] Valor de retorno

(Ninguno)

[editar] Excepciones

  • Cualquier excepción lanzada por mutex()->lock().

[editar] Ejemplo

El siguiente ejemplo utiliza a lock para readquirir un mutex que estaba desbloqueado.

#include <mutex>
#include <thread>
#include <iostream>
#include <vector>
#include <chrono>
 
int main()
{
    int contador = 0;
    std::mutex mutex_del_contador;
    std::vector<std::thread> hilos;
 
    auto tarea_obrera = [&](int id) {
        std::unique_lock<std::mutex> cerrojo(mutex_del_contador);
        ++contador;
        std::cout << id << ", contador inicial: " << contador << '\n';
        cerrojo.unlock();
 
        // no mantener el bloqueo mientras simulamos una operación cara
        std::this_thread::sleep_for(std::chrono::seconds(1));
 
        cerrojo.lock();
        ++contador;
        std::cout << id << ", contador final: " << contador << '\n';
    };
 
    for (int i = 0; i < 10; ++i) hilos.emplace_back(tarea_obrera, i);
 
    for (auto &hilo : hilos) hilo.join();
}

Posible salida:

0, contador inicial: 1
1, contador inicial: 2
2, contador inicial: 3
3, contador inicial: 4
4, contador inicial: 5
5, contador inicial: 6
6, contador inicial: 7
7, contador inicial: 8
8, contador inicial: 9
9, contador inicial: 10
6, contador final: 11
3, contador final: 12
4, contador final: 13
2, contador final: 14
5, contador final: 15
0, contador final: 16
1, contador final: 17
7, contador final: 18
9, contador final: 19
8, contador final: 20

[editar] Véase también

Intenta bloquear el mutex asociado (es decir, tomar posesión) sin bloquearse.
(función miembro pública) [editar]
Desbloquea el mutex asociado; es decir, libera su posesión.
(función miembro pública) [editar]