Concurrency support library
C++는 스레드, 원자적 연산, 상호 배제, 조건 변수, 스레드별 저장소에 대한 내장 지원을 포함합니다.
이러한 기능들은 선택적으로 제공됩니다:
-
매크로 상수
__STDC_NO_THREADS__가 컴파일러에 의해 정의된 경우, <threads.h> 헤더와 그 안에서 제공되는 모든 이름들이 제공되지 않습니다; -
매크로 상수
__STDC_NO_ATOMICS__가 컴파일러에 의해 정의된 경우, <stdatomic.h> 헤더와 그 안에서 제공되는 모든 이름들이 제공되지 않습니다.
참고 항목
_Atomic
타입 지정자 및 한정자
.
목차 |
스레드
|
헤더 파일에 정의됨
<threads.h>
|
|
thrd_t
|
스레드를 식별하는 구현 정의 완전 객체 타입 |
|
(C11)
|
스레드를 생성함
(함수) |
|
(C11)
|
두 식별자가 동일한 스레드를 참조하는지 확인함
(함수) |
|
(C11)
|
현재 스레드 식별자를 얻음
(함수) |
|
(C11)
|
호출 스레드의 실행을 주어진 시간 동안 일시 중단함
(함수) |
|
(C11)
|
현재 타임 슬라이스를 양보함
(함수) |
|
(C11)
|
호출 스레드를 종료함
(함수) |
|
(C11)
|
스레드를 분리함
(함수) |
|
(C11)
|
스레드가 종료될 때까지 블록함
(함수) |
|
스레드 오류 상태를 나타냄
(상수) |
|
|
thrd_start_t
(C11)
|
함수 포인터 타입의 typedef,
int
(
*
)
(
void
*
)
,
thrd_create
에서 사용됨
(typedef) |
원자적 연산
|
헤더 파일에 정의됨
<stdatomic.h>
|
|
원자적 타입 연산 |
|
|
주어진 원자적 타입이 락-프리임을 나타냅니다
(매크로 상수) |
|
|
(C11)
|
원자적 객체가 lock-free인지 여부를 나타냅니다
(함수) |
|
원자적 객체에 값을 저장합니다
(함수) |
|
|
원자적 객체로부터 값을 읽습니다
(함수) |
|
|
원자적 객체의 값과 값을 교환합니다
(함수) |
|
|
예상한 값과 이전 값이 일치하면 값을 원자 객체와 교환하고, 그렇지 않으면 이전 값을 읽습니다
(함수) |
|
|
원자적 덧셈
(함수) |
|
|
원자적 감산
(함수) |
|
|
원자적 비트 OR
(함수) |
|
|
원자적 비트 배타적 OR
(함수) |
|
|
원자적 비트 AND
(함수) |
|
플래그 타입 및 연산 |
|
|
(C11)
|
락-프리 원자적 불리언 플래그
(구조체) |
|
atomic_flag를 true로 설정하고 이전 값을 반환합니다
(함수) |
|
|
atomic_flag를 false로 설정
(함수) |
|
초기화 |
|
|
(C11)
|
기존 atomic 객체를 초기화합니다
(함수) |
|
(C11)
(C17에서 사용 중단됨)
(C23에서 제거됨)
|
새로운 atomic 객체를 초기화합니다
(함수 매크로) |
|
(C11)
|
새로운
atomic_flag
를 초기화합니다
(매크로 상수) |
메모리 동기화 순서 |
|
|
(C11)
|
메모리 순서 제약 조건을 정의함
(enum) |
|
(C11)
|
memory_order_consume
에 대한 의존성 체인을 끊습니다
(함수 매크로) |
|
(C11)
|
범용 메모리 순서 의존적 펜스 동기화 기본 요소
(함수) |
|
(C11)
|
동일한 스레드에서 실행되는 스레드와 시그널 핸들러 간의 펜스
(함수) |
편의를 위한 타입 별칭 |
|
| typedef 이름 | 전체 타입 이름 |
atomic_bool
(C11)
|
_Atomic _Bool (C23 이전) _Atomic bool (C23 이후) |
atomic_char
(C11)
|
_Atomic char |
atomic_schar
(C11)
|
_Atomic signed char |
atomic_uchar
(C11)
|
_Atomic unsigned char |
atomic_short
(C11)
|
_Atomic short |
atomic_ushort
(C11)
|
_Atomic unsigned short |
atomic_int
(C11)
|
_Atomic int |
atomic_uint
(C11)
|
_Atomic unsigned int |
atomic_long
(C11)
|
_Atomic long |
atomic_ulong
(C11)
|
_Atomic unsigned long |
atomic_llong
(C11)
|
_Atomic long long |
atomic_ullong
(C11)
|
_Atomic unsigned long long |
atomic_char8_t
(C23)
|
_Atomic char8_t |
atomic_char16_t
(C11)
|
_Atomic char16_t |
atomic_char32_t
(C11)
|
_Atomic char32_t |
atomic_wchar_t
(C11)
|
_Atomic wchar_t |
atomic_int_least8_t
(C11)
|
_Atomic int_least8_t |
atomic_uint_least8_t
(C11)
|
_Atomic uint_least8_t |
atomic_int_least16_t
(C11)
|
_Atomic int_least16_t |
atomic_uint_least16_t
(C11)
|
_Atomic uint_least16_t |
atomic_int_least32_t
(C11)
|
_Atomic int_least32_t |
atomic_uint_least32_t
(C11)
|
_Atomic uint_least32_t |
atomic_uint_least32_t
(C11)
|
_Atomic uint_least32_t |
atomic_int_least64_t
(C11)
|
_Atomic int_least64_t |
atomic_uint_least64_t
(C11)
|
_Atomic uint_least64_t |
atomic_int_fast8_t
(C11)
|
_Atomic int_fast8_t |
atomic_uint_fast8_t
(C11)
|
_Atomic uint_fast8_t |
atomic_int_fast16_t
(C11)
|
_Atomic int_fast16_t |
atomic_uint_fast16_t
(C11)
|
_Atomic uint_fast16_t |
atomic_int_fast32_t
(C11)
|
_Atomic int_fast32_t |
atomic_uint_fast32_t
(C11)
|
_Atomic uint_fast32_t |
atomic_int_fast64_t
(C11)
|
_Atomic int_fast64_t |
atomic_uint_fast64_t
(C11)
|
_Atomic uint_fast64_t |
atomic_intptr_t
(C11)
|
_Atomic intptr_t |
atomic_uintptr_t
(C11)
|
_Atomic uintptr_t |
atomic_size_t
(C11)
|
_Atomic size_t |
atomic_ptrdiff_t
(C11)
|
_Atomic ptrdiff_t |
atomic_intmax_t
(C11)
|
_Atomic intmax_t |
atomic_uintmax_t
(C11)
|
_Atomic uintmax_t |
atomic_uintmax_t
(C11)
|
_Atomic uintmax_t |
상호 배제
|
헤더 파일에 정의됨
<threads.h>
|
|
mtx_t
|
뮤텍스 식별자 |
|
(C11)
|
뮤텍스를 생성함
(함수) |
|
(C11)
|
뮤텍스를 잠글 때까지 블록함
(함수) |
|
(C11)
|
뮤텍스를 잠그거나 타임아웃될 때까지 블록함
(함수) |
|
(C11)
|
뮤텍스를 잠그거나 이미 잠겨 있으면 블록하지 않고 반환함
(함수) |
|
(C11)
|
뮤텍스를 해제함
(함수) |
|
(C11)
|
뮤텍스를 파괴함
(함수) |
|
(C11)
(C11)
(C11)
|
뮤텍스의 타입을 정의함
(열거형) |
한 번 호출 |
|
|
(C11)
|
함수를 정확히 한 번만 호출함
(함수) |
조건 변수
|
헤더 파일에 정의됨
<threads.h>
|
|
cnd_t
|
조건 변수 식별자 |
|
(C11)
|
조건 변수를 생성함
(함수) |
|
(C11)
|
조건 변수에서 블록된 하나의 스레드를 해제함
(함수) |
|
(C11)
|
조건 변수에서 블록된 모든 스레드를 해제함
(함수) |
|
(C11)
|
조건 변수에서 블록됨
(함수) |
|
(C11)
|
조건 변수에서 블록됨, 타임아웃 포함
(함수) |
|
(C11)
|
조건 변수를 파괴함
(함수) |
스레드 지역 저장소
|
헤더 파일에 정의됨
<threads.h>
|
|
|
(C11)
(C23에서 제거됨)
|
스토리지 클래스 지정자
_Thread_local
를 위한 편의 매크로
(키워드 매크로) |
tss_t
|
스레드별 스토리지 포인터 |
|
(C11)
|
소멸자가 호출되는 최대 횟수
(매크로 상수) |
tss_dtor_t
(C11)
|
함수 포인터 타입
void
(
*
)
(
void
*
)
, TSS 소멸자에 사용됨
(typedef) |
|
(C11)
|
주어진 소멸자로 스레드별 스토리지 포인터를 생성함
(함수) |
|
(C11)
|
스레드별 스토리지에서 읽음
(함수) |
|
(C11)
|
스레드별 스토리지에 씀
(함수) |
|
(C11)
|
주어진 스레드별 포인터가 보유한 자원을 해제함
(함수) |
예약 식별자
향후 C 표준 개정판에서:
-
cnd_,mtx_,thrd_, 또는tss_로 시작하고 소문자로 이어지는 함수 이름, 타입 이름, 열거형 상수는<threads.h>헤더의 선언에 추가될 수 있습니다; -
ATOMIC_으로 시작하고 대문자로 이어지는 매크로는 <stdatomic.h> 헤더에 정의된 매크로에 추가될 수 있습니다; -
atomic_또는memory_로 시작하고 소문자로 이어지는 typedef 이름은 <stdatomic.h> 헤더의 선언에 추가될 수 있습니다; -
memory_order_로 시작하고 소문자로 이어지는 열거형 상수는 memory_order 타입의 정의에 <stdatomic.h> 헤더에서 추가될 수 있습니다; -
atomic_으로 시작하고 소문자로 이어지는 함수 이름은 <stdatomic.h> 헤더의 선언에 추가될 수 있습니다.
함수 이름으로 예약된 식별자는 항상 potentially (since C23) 외부 링크를 가진 식별자로 사용하기 위해 예약되어 있는 반면, 여기에 나열된 다른 식별자들은 potentially (since C23) <stdatomic.h> 가 포함될 때 예약됩니다.
그러한 식별자를 선언, 정의 또는 #undef 하는 것은 표준 또는 구현체에서 제공하는 경우 정의되지 않은 동작을 초래합니다 (C23부터) . 이식성 있는 프로그램은 그러한 식별자를 사용해서는 안 됩니다.
참고문헌
- C23 표준 (ISO/IEC 9899:2024):
-
- 7.17 Atomics <stdatomic.h> (p: TBD)
-
- 7.26 Threads <threads.h> (p: TBD)
-
- 7.31.8 Atomics <stdatomic.h> (p: TBD)
-
- 7.31.15 Threads <threads.h> (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
-
- 7.17 Atomics <stdatomic.h> (p: 200-209)
-
- 7.26 Threads <threads.h> (p: 274-283)
-
- 7.31.8 Atomics <stdatomic.h> (p: 332)
-
- 7.31.15 Threads <threads.h> (p: 333)
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.17 Atomics <stdatomic.h> (p: 273-286)
-
- 7.26 Threads <threads.h> (p: 376-387)
-
- 7.31.8 Atomics <stdatomic.h> (p: 455-456)
-
- 7.31.15 Threads <threads.h> (p: 456)
참고 항목
|
C++ 문서
for
병행성 지원 라이브러리
|
외부 링크
| GNU GCC Libc 매뉴얼: ISO C 뮤텍스 |