Namespaces
Variants

std::shared_timed_mutex:: lock

From cppreference.net

Concurrency support library
Threads
(C++11)
(C++20)
this_thread namespace
(C++11)
(C++11)
Cooperative cancellation
Mutual exclusion
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
void lock ( ) ;
(C++14 이후)

뮤텍스를 잠급니다. 다른 스레드가 이미 뮤텍스를 잠근 경우, lock 호출은 잠금이 획득될 때까지 실행을 차단합니다.

만약 lock 이 이미 mutex 를 어떤 모드(공유 또는 배타적)로든 소유하고 있는 스레드에 의해 호출되면, 그 동작은 정의되지 않습니다.

동일한 뮤텍스에 대한 이전 unlock() 연산들은 이 연산과 동기화됩니다 ( std::memory_order 에 정의된 대로).

목차

예외

오류가 발생할 경우 std::system_error 를 발생시킵니다. 여기에는 lock 이 명세를 충족하는 것을 방해하는 기본 운영 체제의 오류도 포함됩니다. 예외가 발생한 경우 뮤텍스는 잠기지 않은 상태입니다.

참고 사항

lock() 는 일반적으로 직접 호출되지 않습니다: std::unique_lock , std::scoped_lock , 그리고 std::lock_guard 가 배타적 잠금 관리를 위해 사용됩니다.

공유 뮤텍스는 공유 모드에서 독점 소유권 모드로의 직접 전환을 지원하지 않습니다: unlock_shared() 로 공유 잠금을 해제한 후에야 lock() 를 통해 독점 소유권을 획득할 수 있습니다. boost::upgrade_mutex 를 이 목적으로 사용할 수 있습니다.

예제

이 예제는 lock unlock 이 공유 데이터를 보호하는 데 어떻게 사용될 수 있는지 보여줍니다.

#include <chrono>
#include <iostream>
#include <mutex>
#include <thread>
int g_num = 0; // protected by g_num_mutex
std::mutex g_num_mutex;
void slow_increment(int id) 
{
    for (int i = 0; i < 3; ++i)
    {
        g_num_mutex.lock(); 
        ++g_num;
        // note, that the mutex also syncronizes the output
        std::cout << "id: " << id << ", g_num: " << g_num << '\n';
        g_num_mutex.unlock();
        std::this_thread::sleep_for(std::chrono::milliseconds(234));
    }
}
int main()
{
    std::thread t1{slow_increment, 0};
    std::thread t2{slow_increment, 1};
    t1.join();
    t2.join();
}

가능한 출력:

id: 0, g_num: 1
id: 1, g_num: 2
id: 1, g_num: 3
id: 0, g_num: 4
id: 0, g_num: 5
id: 1, g_num: 6

참고 항목

뮤텍스를 잠그려 시도하며, 뮤텍스를 사용할 수 없는 경우 반환합니다
(public member function)
뮤텍스를 해제합니다
(public member function)
C documentation for mtx_lock