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::shared_lock::lock(3) C++ Standard Libary std::shared_lock::lock(3)

std::shared_lock::lock - std::shared_lock::lock


void lock(); (since C++14)


Locks the associated mutex in shared mode. Effectively calls mutex()->lock_shared().


(none)


(none)


* Any exceptions thrown by mutex()->lock_shared()


* If there is no associated mutex, std::system_error with an error code of
std::errc::operation_not_permitted


* If the associated mutex is already locked by this shared_lock (that is,
owns_lock returns true), std::system_error with an error code of
std::errc::resource_deadlock_would_occur


This section is incomplete
Reason: show a meaningful use of shared_lock::lock

// Run this code


#include <iostream>
#include <mutex>
#include <string>
#include <shared_mutex>
#include <thread>


std::string file = "Original content."; // Simulates a file
std::mutex output_mutex; // mutex that protects output operations.
std::shared_mutex file_mutex; // reader/writer mutex


void read_content(int id)
{
std::string content;
{
std::shared_lock lock(file_mutex, std::defer_lock); // Do not lock it first.
lock.lock(); // Lock it here.
content = file;
}
std::lock_guard lock(output_mutex);
std::cout << "Contents read by reader #" << id << ": " << content << '\n';
}


void write_content()
{
{
std::lock_guard file_lock(file_mutex);
file = "New content";
}
std::lock_guard output_lock(output_mutex);
std::cout << "New content saved.\n";
}


int main()
{
std::cout << "Two readers reading from file.\n"
<< "A writer competes with them.\n";
std::thread reader1{read_content, 1};
std::thread reader2{read_content, 2};
std::thread writer{write_content};
reader1.join();
reader2.join();
writer.join();
std::cout << "The first few operations to file are done.\n";
reader1 = std::thread{read_content, 3};
reader1.join();
}


Two readers reading from file.
A writer competes with them.
Contents read by reader #1: Original content.
Contents read by reader #2: Original content.
New content saved.
The first few operations to file are done.
Contents read by reader #3: New content


try_lock tries to lock the associated mutex
(public member function)
unlock unlocks the associated mutex
(public member function)

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.