GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::mutex(3) C++ Standard Libary std::mutex(3)

std::mutex - std::mutex


Defined in header <mutex>
class mutex; (since C++11)


The mutex class is a synchronization primitive that can be used to protect shared
data from being simultaneously accessed by multiple threads.


mutex offers exclusive, non-recursive ownership semantics:


* A calling thread owns a mutex from the time that it successfully calls either
lock or try_lock until it calls unlock.
* When a thread owns a mutex, all other threads will block (for calls to lock) or
receive a false return value (for try_lock) if they attempt to claim ownership
of the mutex.
* A calling thread must not own the mutex prior to calling lock or try_lock.


The behavior of a program is undefined if a mutex is destroyed while still owned by
any threads, or a thread terminates while owning a mutex. The mutex class satisfies
all requirements of Mutex and StandardLayoutType.


std::mutex is neither copyable nor movable.


Member type Definition
native_handle_type(not always present) implementation-defined


constructor constructs the mutex
(public member function)
destructor destroys the mutex
(public member function)
operator= not copy-assignable
[deleted] (public member function)


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)
unlock unlocks the mutex
(public member function)


native_handle returns the underlying implementation-defined native handle object
(public member function)


std::mutex is usually not accessed directly: std::unique_lock, std::lock_guard,
or std::scoped_lock
(since C++17) manage locking in a more exception-safe manner.


This example shows how a mutex can be used to protect an std::map shared between two
threads.

// Run this code


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


std::map<std::string, std::string> g_pages;
std::mutex g_pages_mutex;


void save_page(const std::string &url)
{
// simulate a long page fetch
std::this_thread::sleep_for(std::chrono::seconds(2));
std::string result = "fake content";


std::lock_guard<std::mutex> guard(g_pages_mutex);
g_pages[url] = result;
}


int main()
{
std::thread t1(save_page, "http://foo");
std::thread t2(save_page, "http://bar");
t1.join();
t2.join();


// safe to access g_pages without lock now, as the threads are joined
for (const auto &pair : g_pages) {
std::cout << pair.first << " => " << pair.second << '\n';
}
}


http://bar => fake content
http://foo => fake content


recursive_mutex provides mutual exclusion facility which can be locked
(C++11) recursively by the same thread
(class)
lock_guard implements a strictly scope-based mutex ownership wrapper
(C++11) (class template)
unique_lock implements movable mutex ownership wrapper
(C++11) (class template)
scoped_lock deadlock-avoiding RAII wrapper for multiple mutexes
(C++17) (class template)
condition_variable provides a condition variable associated with a std::unique_lock
(C++11) (class)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.