Example of std::shared_lock

C++




// C++ program to illustrate the use of shared_mutex
#include <iostream>
#include <shared_mutex>
#include <mutex>
#include <thread>
using namespace std;
  
// creating a shared_mutex object
shared_mutex mutx;
int shared_data = 11;
  
// callable with shared lock
void readData() {
    shared_lock<shared_mutex> lock(mutx);
    cout << "Thread " << this_thread::get_id() << ": "
    cout << shared_data << endl;
}
  
// callable with unique_lock
void writeData(int n) {
    unique_lock<shared_mutex> lock(mutx);
    shared_data = n;
    cout << "Thread" << this_thread::get_id() << ": \n";
}
  
// driver code
int main()
{
    thread t1(readData);
    thread t2(writeData, 128);
    thread t3(writeData, 10);
    thread t4 (readData);
      
    t1.join();
    t2.join();
    t3.join();
    t4.join();
    return 0;
}


Output

Read Thread 140122977658432: 11
Write Thread 140122960873024
Write Thread 140122969265728
Read Thread 140122952480320: 128

std::shared_mutex in C++

In C++, std::mutex is a mechanism that locks access to the shared resource when some other thread is working on it so that errors such as race conditions can be avoided and threads can be synchronized. But in some cases, several threads need to read the data from shared resources at the same time. Here, the std::shared_mutex comes into play. In this article, we will discuss the std::shared_mutex, its associated methods, and how it is different from the std::mutex in C++.

Similar Reads

std::shared_mutex in C++

In C++, std::shared_mutex is a synchronization primitive that lets several threads use a shared resource simultaneously for reading while guaranteeing exclusive writing access. It is helpful in situations where many threads need read-only access to the same data structure, but write operations aren’t often used....

Methods Associated with std::shared_mutex

The std::shared_mutex contains several member methods that are required to perform different operations. Some of the commonly used functions are:...

Example of std::shared_lock

C++ // C++ program to illustrate the use of shared_mutex #include #include #include #include using namespace std;    // creating a shared_mutex object shared_mutex mutx; int shared_data = 11;    // callable with shared lock void readData() {     shared_lock lock(mutx);     cout << "Thread " << this_thread::get_id() << ": ";      cout << shared_data << endl; }    // callable with unique_lock void writeData(int n) {     unique_lock lock(mutx);     shared_data = n;     cout << "Thread" << this_thread::get_id() << ": \n"; }    // driver code int main() {     thread t1(readData);     thread t2(writeData, 128);     thread t3(writeData, 10);     thread t4 (readData);            t1.join();     t2.join();     t3.join();     t4.join();     return 0; }...

std::shared_mutex vs std::mutex

...

Applications

Similar to std::mutex, std::shared_mutex is a synchronization primitive that prevents concurrent access to shared resources. Both have their own advantages and disadvantages....

Conclusion

Following are some main applications of std::shared_mutex:...

Contact Us