Namespaces
Variants

std::mutex:: unlock

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
Generic lock management
Condition variables
(C++11)
Semaphores
Latches and Barriers
(C++20)
(C++20)
Futures
(C++11)
(C++11)
(C++11)
Safe reclamation
Hazard pointers
Atomic types
(C++11)
(C++20)
Initialization of atomic types
(C++11) (deprecated in C++20)
(C++11) (deprecated in C++20)
Memory ordering
(C++11) (deprecated in C++26)
Free functions for atomic operations
Free functions for atomic flags
void unlock ( ) ;
(desde C++11)

Desbloquea el mutex. El mutex debe estar bloqueado por el hilo de ejecución actual, de lo contrario, el comportamiento es indefinido.

Esta operación synchronizes-with (como se define en std::memory_order ) cualquier operación de bloqueo posterior que obtenga la propiedad del mismo mutex.

Notas

unlock() normalmente no se llama directamente: std::unique_lock y std::lock_guard se utilizan para gestionar el bloqueo exclusivo.

Ejemplo

Este ejemplo muestra cómo lock y unlock pueden utilizarse para proteger datos compartidos.

#include <chrono>
#include <iostream>
#include <mutex>
#include <thread>
int g_num = 0; // protected by g_num_mutex
std::mutex g_num_mutex;
void slow_increment(int id) 
{
    for (int i = 0; i < 3; ++i)
    {
        g_num_mutex.lock();
        int g_num_running = ++g_num;
        g_num_mutex.unlock();
        std::cout << id << " => " << g_num_running << '\n';
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}
int main()
{
    std::thread t1(slow_increment, 0);
    std::thread t2(slow_increment, 1);
    t1.join();
    t2.join();
}

Salida posible:

0 => 1
1 => 2
0 => 3
1 => 4
0 => 5
1 => 6

Véase también

bloquea el mutex, se bloquea si el mutex no está disponible
(función miembro pública)
intenta bloquear el mutex, retorna si el mutex no está disponible
(función miembro pública)
Documentación de C para mtx_unlock