table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::shared_lock::lock(3) | C++ Standard Libary | std::shared_lock::lock(3) | 
NAME¶
std::shared_lock::lock - std::shared_lock::lock
Synopsis¶
void lock(); (since C++14)
  
   Locks the associated mutex in shared mode. Effectively calls
    mutex()->lock_shared().
Parameters¶
(none)
Return value¶
(none)
Exceptions¶
 * 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.
Example¶
 This section is incomplete
  
   Reason: show a meaningful use of shared_lock::lock
// Run this code
  
   #include <iostream>
  
   #include <mutex>
  
   #include <shared_mutex>
  
   #include <string>
  
   #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();
  
   }
Possible output:¶
 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
See also¶
 try_lock tries to lock the associated mutex
  
   (public member function)
  
   unlock unlocks the associated mutex
  
   (public member function)
Category:¶
* Todo with reason
| 2024.06.10 | http://cppreference.com |