Namespaces
Variants

std:: shared_timed_mutex

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

shared_timed_mutex 클래스는 여러 스레드가 동시에 접근하는 것으로부터 공유 데이터를 보호하는 데 사용할 수 있는 동기화 기본 요소입니다. 배타적 접근을 용이하게 하는 다른 뮤텍스 유형과 달리, shared_timed_mutex 는 두 가지 수준의 접근 권한을 가집니다:

  • exclusive - 뮤텍스를 소유할 수 있는 스레드는 오직 하나뿐입니다.
  • shared - 여러 스레드가 동일한 뮤텍스의 소유권을 공유할 수 있습니다.

공유 뮤텍스는 일반적으로 여러 리더가 데이터 레이스를 발생시키지 않고 동시에 동일한 리소스에 접근할 수 있지만, 오직 하나의 라이터만이 접근할 수 있는 상황에서 사용됩니다.

timed_mutex 와 유사한 방식으로, shared_timed_mutex try_lock_for() , try_lock_until() , try_lock_shared_for() , try_lock_shared_until() 멤버 함수들을 통해 타임아웃을 설정하여 shared_timed_mutex 의 소유권을 요청하는 기능을 제공합니다.

shared_timed_mutex 클래스는 SharedTimedMutex StandardLayoutType 의 모든 요구사항을 충족합니다.

목차

멤버 함수

뮤텍스를 생성함
(public member function)
뮤텍스를 파괴함
(public member function)
operator=
[deleted]
복사 할당 불가
(public member function)
배타적 잠금
뮤텍스를 잠금, 사용 불가능할 경우 차단됨
(public member function)
뮤텍스 잠금을 시도함, 사용 불가능할 경우 반환됨
(public member function)
뮤텍스 잠금을 시도함, 지정된 시간 동안
사용 불가능한 경우 반환됨
(public member function)
뮤텍스 잠금을 시도함, 지정된 시간점까지
사용 불가능한 경우 반환됨
(public member function)
뮤텍스를 잠금 해제함
(public member function)
공유 잠금
공유 소유권을 위해 뮤텍스를 잠금, 사용 불가능할 경우 차단됨
(public member function)
공유 소유권을 위해 뮤텍스 잠금을 시도함, 사용 불가능할 경우 반환됨
(public member function)
공유 소유권을 위해 뮤텍스 잠금을 시도함, 지정된 시간 동안
사용 불가능한 경우 반환됨
(public member function)
공유 소유권을 위해 뮤텍스 잠금을 시도함, 지정된 시간점까지
사용 불가능한 경우 반환됨
(public member function)
뮤텍스를 잠금 해제함 (공유 소유권)
(public member function)

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_shared_timed_mutex 201402L (C++14) std::shared_timed_mutex

예제

여러 명의 읽기 권한을 가질 수 있지만 한 명의 쓰기 권한만을 처리할 수 있는 리소스를 보유하는 클래스의 복사 할당 연산자.

#include <mutex>
#include <shared_mutex>
class R
{
    mutable std::shared_timed_mutex mut;
    /* data */
public:
    R& operator=(const R& other)
    {
        // requires exclusive ownership to write to *this
        std::unique_lock<std::shared_timed_mutex> lhs(mut, std::defer_lock);
        // requires shared ownership to read from other
        std::shared_lock<std::shared_timed_mutex> rhs(other.mut, std::defer_lock);
        std::lock(lhs, rhs);
        /* assign data */
        return *this;
    }
};
int main()
{
    R r;
}