std::timed_mutex::lock(3)
π NAME π
okay so, bestie, this is the std::timed_mutex::lock(3) page from the C++ Standard Libary β yes, spelled exactly like that on the header, and I am obsessed with the drama of it π
. The name is literally std::timed_mutex::lock β std::timed_mutex::lock, no cap π.
π SYNOPSIS π
void lock(); (since C++11)
Locks the mutex. If another thread has already locked the mutex, a call to lock will block execution until the lock is acquired π΄.
π¨ Iflockis called by a thread that already owns the mutex, the behavior is undefined: for example, the program may deadlock. An implementation that can detect the invalid usage is encouraged to throw astd::system_errorwith error conditionresource_deadlock_would_occurinstead of deadlocking. π¨
Prior unlock() operations on the same mutex synchronize-with (as defined in std::memory_order) this operation β¨.
πΈ PARAMETERS πΈ
(none) β literally no parameters, bestie, none, nada π«Ά.
π¦ RETURN VALUE π¦
(none) β it returns nothing. iconic behavior, honestly π.
π EXCEPTIONS π
Throws std::system_error when errors occur, including errors from the underlying operating system that would prevent lock from meeting its specifications. The mutex is not locked in the case of any exception being thrown π.
π NOTES π
lock() is usually not called directly: std::unique_lock, std::scoped_lock, and std::lock_guard are used to manage exclusive locking. iykyk π
.
π EXAMPLE π
This example shows how lock and unlock can be used to protect shared data. The original page literally says // Run this code right before the snippet, so here it is, exactly as given:
#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();
++g_num;
// note, that the mutex also syncronizes the output
std::cout << "id: " << id << ", g_num: " << g_num << '\n';
g_num_mutex.unlock();
std::this_thread::sleep_for(std::chrono::milliseconds(234));
}
}
int main()
{
std::thread t1{slow_increment, 0};
std::thread t2{slow_increment, 1};
t1.join();
t2.join();
}
Possible output:
id: 0, g_num: 1
id: 1, g_num: 2
id: 1, g_num: 3
id: 0, g_num: 4
id: 0, g_num: 5
id: 1, g_num: 6
β SEE ALSO β
try_lockβ tries to lock the mutex, returns if the mutex is not available (public member function) πtry_lock_forβ tries to lock the mutex, returns if the mutex has been unavailable for the specified timeout duration (public member function) β³try_lock_untilβ tries to lock the mutex, returns if the mutex has been unavailable until specified time point has been reached (public member function) π°οΈunlockβ unlocks the mutex (public member function) π- C documentation for
mtx_lockπ
mwah π this page is from http://cppreference.com, dated 2024.06.10, and it's literally the std::timed_mutex::lock(3) man page β that's the footer, bestie, and we ate πβ¨π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms