Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::shared_lock<Mutex>::lock

      From cppreference.com
      <cpp‎ |thread‎ |shared lock
       
       
      Concurrency support library
      Threads
      (C++11)
      (C++20)
      this_thread namespace
      (C++11)
      (C++11)
      (C++11)
      Cooperative cancellation
      Mutual exclusion
      Generic lock management
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      Condition variables
      (C++11)
      Semaphores
      Latches and Barriers
      (C++20)
      (C++20)
      Futures
      (C++11)
      (C++11)
      (C++11)
      Safe reclamation
      Hazard pointers
      Atomic types
      (C++11)
      (C++20)
      Initialization of atomic types
      (C++11)(deprecated in C++20)
      (C++11)(deprecated in C++20)
      Memory ordering
      (C++11)(deprecated in C++26)
      Free functions for atomic operations
      Free functions for atomic flags
       
       
      void lock();
      (since C++14)

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

      Contents

      [edit]Parameters

      (none)

      [edit]Return value

      (none)

      [edit]Exceptions

      • Any exceptions thrown bymutex()->lock_shared().

      [edit]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 filestd::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

      [edit]See also

      tries to lock the associated mutex
      (public member function)[edit]
      unlocks the associated mutex
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/shared_lock/lock&oldid=161224"

      [8]ページ先頭

      ©2009-2025 Movatter.jp