Scroll to navigation

std::mutex::unlock(3) C++ Standard Libary std::mutex::unlock(3)

NAME

std::mutex::unlock - std::mutex::unlock

Synopsis


void unlock(); (since C++11)


Unlocks the mutex.


The mutex must be locked by the current thread of execution, otherwise, the behavior
is undefined.


This operation synchronizes-with (as defined in std::memory_order) any subsequent
lock operation that obtains ownership of the same mutex.

Parameters


(none)

Return value


(none)

Exceptions


Throws nothing.

Notes


unlock() is usually not called directly: std::unique_lock and std::lock_guard are
used to manage exclusive locking.

Example


This example shows how lock and unlock can be used to protect shared data.

// Run this code


#include <iostream>
#include <chrono>
#include <thread>
#include <mutex>


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

Possible output:


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

See also


lock locks the mutex, blocks if the mutex is not available
(public member function)
try_lock tries to lock the mutex, returns if the mutex is not available
(public member function)

2022.07.31 http://cppreference.com