C++ named requirements: SharedMutex (since C++17)
From cppreference.net
C++
C++ named requirements
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SharedMutex 요구 사항은 공유 잠금 소유권 모드를 포함하도록 Mutex 요구 사항을 확장합니다.
요구사항
또한,
m
객체는
SharedMutex
타입의 또 다른 소유권 모드인 공유 모드를 지원합니다. 여러 스레드(또는 더 일반적으로 실행 에이전트)가 이 뮤텍스를 공유 모드로 동시에 소유할 수 있지만, 배타적 모드로 소유하는 스레드가 있는 경우에는 어떤 스레드도 공유 소유권을 획득할 수 없으며, 공유 모드로 소유하는 스레드가 있는 경우에는 어떤 스레드도 배타적 소유권을 획득할 수 없습니다. 구현에서 정의된 수(10000 이상)보다 많은 스레드가 공유 락을 보유하고 있는 경우, 공유 모드로 뮤텍스를 획득하려는 추가 시도는 공유 소유자의 수가 해당 임계값 아래로 떨어질 때까지 차단됩니다.
- 다음 표현식 m. lock_shared ( ) 은 다음과 같은 특성을 가집니다:
-
- 원자적 연산으로 동작합니다.
- 뮤텍스의 공유 소유권을 획득할 때까지 호출 스레드를 차단합니다.
- 동일한 뮤텍스에 대한 이전 m. unlock ( ) 연산이 이 잠금 연산과 synchronize-with 관계를 가집니다 (release-acquire std::memory_order 와 동등함).
- 호출 스레드가 이미 어떤 모드로든 뮤텍스를 소유하고 있는 경우 동작은 정의되지 않습니다.
- 예외가 발생하면 공유 잠금은 획득되지 않습니다.
- 다음 표현식 m. try_lock_shared ( ) 은 다음과 같은 특성을 가집니다:
-
- 원자적 연산으로 동작합니다.
- 호출 스레드가 차단되지 않고 뮤텍스의 공유 소유권을 획득하려 시도합니다. 소유권을 획득하지 못할 경우 즉시 반환합니다. 이 함수는 현재 어떤 스레드도 어떤 모드로도 뮤텍스를 소유하고 있지 않은 경우에도 허위 실패하고 반환할 수 있습니다.
-
try_lock_shared()가 성공하면, 동일 객체에 대한 이전unlock()연산들이 이 연산과 동기화됩니다 (release-acquire std::memory_order 와 동등함). - 호출 스레드가 이미 어떤 모드로든 뮤텍스를 소유하고 있는 경우 동작은 정의되지 않습니다.
- 다음 표현식 m. unlock_shared ( ) 은 다음과 같은 특성을 가집니다:
-
- 원자적 연산으로 동작합니다.
- 뮤텍스에 대한 호출 스레드의 소유권을 해제하고 동일한 객체에 대한 synchronizes-with 후속 성공적인 lock 연산과 동기화합니다.
- 호출 스레드가 뮤텍스를 소유하지 않은 경우 동작은 정의되지 않습니다.
- 단일 뮤텍스에 대한 모든 잠금 및 잠금 해제 작업은 단일 전체 순서로 발생합니다.
표준 라이브러리
다음 표준 라이브러리 타입들은 SharedMutex 요구사항을 충족합니다:
|
(C++17)
|
공유 상호 배제 기능을 제공함
(클래스) |
|
(C++14)
|
공유 상호 배제 기능을 제공하며 타임아웃으로 잠금을 구현함
(클래스) |