C++ named requirements: TimedMutex (since C++11)
From cppreference.net
TimedMutex 요구 사항은 스레드 간 동기화를 포함하도록 TimedLockable 요구 사항을 확장합니다.
목차 |
요구사항
또한,
m
객체가
TimedMutex
타입일 경우:
- 다음 표현식 m. try_lock_for ( duration ) 은 다음과 같은 특성을 가집니다
-
- 원자적 연산으로 동작합니다.
-
duration으로 지정된 시간 내에 뮤텍스의 배타적 소유권을 획득하려 시도합니다.duration이duration.zero()보다 작거나 같은 경우, 블로킹 없이 소유권 획득을 시도합니다(try_lock()과 유사하게). 그렇지 않은 경우, 이 함수는 뮤텍스가 획득되거나duration으로 지정된 시간이 경과할 때까지 블록됩니다. 성공한 경우에만duration내에 반환되지만,duration동안 특정 시점에 다른 스레드가 소유하지 않았더라도 뮤텍스 획득에 실패할 수 있습니다. 어떤 경우든 뮤텍스가 획득되면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다. -
try_lock_for(duration)이 성공하면, 동일 객체에 대한 이전unlock()연산들이 이 연산과 동기화됩니다 (release-acquire std::memory_order 와 동등함). - 호출 스레드가 이미 뮤텍스를 소유하고 있는 경우 동작은 정의되지 않습니다(m이 std::recursive_timed_mutex 인 경우는 제외).
- 실행 중에 clock, time point 또는 duration에 의해 예외가 발생할 수 있습니다(표준 라이브러리가 제공하는 clocks, time points, durations은 예외를 발생시키지 않음).
- 다음 표현식 m. try_lock_until ( time_point ) 은 다음과 같은 특성을 가집니다
-
- 원자적 연산으로 동작합니다.
-
time_point까지 남은 시간 내에 뮤텍스의 배타적 소유권을 획득하려 시도합니다. 만약time_point가 이미 지난 경우, 블로킹 없이 소유권 획득을 시도합니다(try_lock()처럼). 그렇지 않으면 이 함수는 뮤텍스가 획득되거나time_point로 지정된 시간이 경과할 때까지 블록됩니다. 성공한 경우에만time_point이전에 반환되지만,time_point이전의 어떤 시점에서 다른 스레드가 소유하지 않았더라도 뮤텍스 획득에 실패할 수 있습니다. 어떤 경우든 뮤텍스가 획득되면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다. -
try_lock_until(time_point)가 성공하면, 동일 객체에 대한 이전unlock()연산들이 이 연산과 동기화됩니다 (release-acquire std::memory_order 와 동등함). - 호출 스레드가 이미 뮤텍스를 소유하고 있는 경우 동작은 정의되지 않습니다(m이 std::recursive_timed_mutex 인 경우는 제외).
- 실행 중에 clock, time point 또는 duration에 의해 예외가 발생할 수 있습니다(표준 라이브러리가 제공하는 clocks, time points, durations은 절대 예외를 발생시키지 않음).
표준 라이브러리
다음 표준 라이브러리 타입들은 TimedMutex 요구사항을 충족합니다:
|
(C++11)
|
동일 스레드에 의해 재귀적으로 잠글 수 있고 타임아웃을 사용한 잠금을 구현하는
상호 배제 기능을 제공함 (클래스) |
|
(C++14)
|
공유 상호 배제 기능을 제공하고 타임아웃을 사용한 잠금을 구현함
(클래스) |
|
(C++11)
|
타임아웃을 사용한 잠금을 구현하는 상호 배제 기능을 제공함
(클래스) |
결함 보고서
다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 2093 | C++11 | 타임아웃 관련 예외가 명세에서 누락됨 | 명시됨 |