Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::mutex

      From cppreference.com
      <cpp‎ |thread
       
       
      Concurrency support library
      Threads
      (C++11)
      (C++20)
      this_thread namespace
      (C++11)
      (C++11)
      (C++11)
      Cooperative cancellation
      Mutual exclusion
      mutex
      (C++11)
      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
       
       
      Defined in header<mutex>
      class mutex;
      (since C++11)

      Themutex 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 threadowns amutex from the time that it successfully calls eitherlock ortry_lock until it callsunlock.
      • When a thread owns amutex, all other threads will block (for calls tolock) or receive afalse return value (fortry_lock) if they attempt to claim ownership of themutex.
      • A calling thread must not own themutex prior to callinglock ortry_lock.

      The behavior of a program is undefined if amutex is destroyed while still owned by any threads, or a thread terminates while owning amutex. Themutex class satisfies all requirements ofMutex andStandardLayoutType.

      std::mutex is neither copyable nor movable.

      Contents

      [edit]Nested types

      Name Definition
      native_handle_type(optional*) implementation-defined[edit]

      [edit]Member functions

      constructs the mutex
      (public member function)[edit]
      destroys the mutex
      (public member function)[edit]
      operator=
      [deleted]
      not copy-assignable
      (public member function)[edit]
      Locking
      locks the mutex, blocks if the mutex is not available
      (public member function)[edit]
      tries to lock the mutex, returns if the mutex is not available
      (public member function)[edit]
      unlocks the mutex
      (public member function)[edit]
      Native handle
      returns the underlying implementation-defined native handle object
      (public member function)[edit]

      [edit]Notes

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

      [edit]Example

      This example shows how amutex can be used to protect anstd::map shared between two threads.

      Run this code
      #include <chrono>#include <iostream>#include <map>#include <mutex>#include <string>#include <thread> std::map<std::string,std::string> g_pages;std::mutex g_pages_mutex; void save_page(conststd::string& url){// simulate a long page fetchstd::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 joinedfor(constauto&[url, page]: g_pages)std::cout<< url<<" => "<< page<<'\n';}

      Output:

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

      [edit]See also

      provides mutual exclusion facility which can be locked recursively by the same thread
      (class)[edit]
      (C++11)
      implements a strictly scope-based mutex ownership wrapper
      (class template)[edit]
      implements movable mutex ownership wrapper
      (class template)[edit]
      deadlock-avoiding RAII wrapper for multiple mutexes
      (class template)[edit]
      provides a condition variable associated with astd::unique_lock
      (class)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/thread/mutex&oldid=170085"

      [8]ページ先頭

      ©2009-2025 Movatter.jp