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 ( ) ;
(depuis C++11)

Déverrouille le mutex. Le mutex doit être verrouillé par le thread d'exécution actuel, sinon, le comportement est indéfini.

Cette opération synchronizes-with (tel que défini dans std::memory_order ) toute opération de verrouillage ultérieure qui acquiert la propriété du même mutex.

Notes

unlock() n'est généralement pas appelé directement : std::unique_lock et std::lock_guard sont utilisés pour gérer le verrouillage exclusif.

Exemple

Cet exemple montre comment lock et unlock peuvent être utilisés pour protéger des données partagées.

#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();
}

Sortie possible :

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

Voir aussi

verrouille le mutex, bloque si le mutex n'est pas disponible
(fonction membre publique)
tente de verrouiller le mutex, retourne si le mutex n'est pas disponible
(fonction membre publique)
documentation C pour mtx_unlock