Namespaces
Variants

std:: mutex

From cppreference.net
Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
mutex
(C++11)
Generic lock management
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
헤더 파일에 정의됨 <mutex>
class mutex ;
(C++11부터)

mutex 클래스는 여러 스레드가 동시에 접근하는 것으로부터 공유 데이터를 보호하는 데 사용할 수 있는 동기화 기본 요소입니다.

mutex 는 배타적이고 비재귀적인 소유권 의미론을 제공합니다:

  • 호출 스레드는 lock 또는 try_lock 을 성공적으로 호출한 시점부터 unlock 을 호출할 때까지 mutex 소유 합니다.
  • 한 스레드가 mutex 를 소유하고 있을 때, 다른 모든 스레드는 해당 mutex 의 소유권을 획득하려고 시도하면 ( lock 호출 시) 차단되거나 ( try_lock 호출 시) false 반환 값을 받게 됩니다.
  • 호출 스레드는 lock 또는 try_lock 을 호출하기 전에 mutex 를 소유하고 있지 않아야 합니다.

어떤 스레드가 여전히 소유하고 있는 상태에서 mutex 가 파괴되거나, 스레드가 mutex 를 소유한 상태로 종료되는 경우 프로그램의 동작은 정의되지 않습니다. mutex 클래스는 Mutex StandardLayoutType 의 모든 요구 사항을 충족합니다.

std::mutex 는 복사 가능하지도 이동 가능하지도 않습니다.

목차

중첩 타입

이름 정의
native_handle_type ( 선택적* ) 구현 정의

멤버 함수

뮤텍스를 생성함
(public member function)
뮤텍스를 파괴함
(public member function)
operator=
[deleted]
복사 할당 불가
(public member function)
잠금
뮤텍스를 잠금, 뮤텍스를 사용할 수 없는 경우 차단됨
(public member function)
뮤텍스 잠금을 시도함, 뮤텍스를 사용할 수 없는 경우 반환됨
(public member function)
뮤텍스 잠금을 해제함
(public member function)
네이티브 핸들
구현 정의된 기본 네이티브 핸들 객체를 반환함
(public member function)

참고 사항

std::mutex 는 일반적으로 직접 접근되지 않습니다: std::unique_lock , std::lock_guard , 또는 std::scoped_lock (C++17 이후) 가 더 예외 안전한 방식으로 잠금을 관리합니다.

예제

이 예제는 두 스레드 간에 공유되는 mutex std::map 을 보호하는 데 어떻게 사용될 수 있는지 보여줍니다.

#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(const std::string& url)
{
    // simulate a long page fetch
    std::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 joined
    for (const auto& [url, page] : g_pages)
        std::cout << url << " => " << page << '\n';
}

출력:

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

참고 항목

같은 스레드에서 재귀적으로 잠글 수 있는 상호 배제 기능을 제공함
(class)
(C++11)
엄격한 범위 기반 뮤텍스 소유권 래퍼를 구현함
(class template)
이동 가능한 뮤텍스 소유권 래퍼를 구현함
(class template)
데드락을 방지하는 다중 뮤텍스 RAII 래퍼
(class template)
std::unique_lock 과 연관된 조건 변수를 제공함
(class)