Namespaces
Variants

Concurrency support library

From cppreference.net
< c

C++는 스레드, 원자적 연산, 상호 배제, 조건 변수, 스레드별 저장소에 대한 내장 지원을 포함합니다.

이러한 기능들은 선택적으로 제공됩니다:

  • 매크로 상수 __STDC_NO_THREADS__ 가 컴파일러에 의해 정의된 경우, <threads.h> 헤더와 그 안에서 제공되는 모든 이름들이 제공되지 않습니다;
  • 매크로 상수 __STDC_NO_ATOMICS__ 가 컴파일러에 의해 정의된 경우, <stdatomic.h> 헤더와 그 안에서 제공되는 모든 이름들이 제공되지 않습니다.

참고 항목 _Atomic 타입 지정자 및 한정자 .

목차

스레드

헤더 파일에 정의됨 <threads.h>
thrd_t 스레드를 식별하는 구현 정의 완전 객체 타입
스레드를 생성함
(함수)
두 식별자가 동일한 스레드를 참조하는지 확인함
(함수)
현재 스레드 식별자를 얻음
(함수)
호출 스레드의 실행을 주어진 시간 동안 일시 중단함
(함수)
현재 타임 슬라이스를 양보함
(함수)
호출 스레드를 종료함
(함수)
스레드를 분리함
(함수)
스레드가 종료될 때까지 블록함
(함수)
스레드 오류 상태를 나타냄
(상수)
thrd_start_t
(C11)
함수 포인터 타입의 typedef, int ( * ) ( void * ) , thrd_create 에서 사용됨
(typedef)

원자적 연산

헤더 파일에 정의됨 <stdatomic.h>
원자적 타입 연산
주어진 원자적 타입이 락-프리임을 나타냅니다
(매크로 상수)
원자적 객체가 lock-free인지 여부를 나타냅니다
(함수)
원자적 객체에 값을 저장합니다
(함수)
원자적 객체로부터 값을 읽습니다
(함수)
원자적 객체의 값과 값을 교환합니다
(함수)
예상한 값과 이전 값이 일치하면 값을 원자 객체와 교환하고, 그렇지 않으면 이전 값을 읽습니다
(함수)
원자적 덧셈
(함수)
원자적 감산
(함수)
원자적 비트 OR
(함수)
원자적 비트 배타적 OR
(함수)
원자적 비트 AND
(함수)
플래그 타입 및 연산
락-프리 원자적 불리언 플래그
(구조체)
atomic_flag를 true로 설정하고 이전 값을 반환합니다
(함수)
atomic_flag를 false로 설정
(함수)
초기화
기존 atomic 객체를 초기화합니다
(함수)
(C11) (C17에서 사용 중단됨) (C23에서 제거됨)
새로운 atomic 객체를 초기화합니다
(함수 매크로)
새로운 atomic_flag 를 초기화합니다
(매크로 상수)
메모리 동기화 순서
메모리 순서 제약 조건을 정의함
(enum)
memory_order_consume 에 대한 의존성 체인을 끊습니다
(함수 매크로)
범용 메모리 순서 의존적 펜스 동기화 기본 요소
(함수)
동일한 스레드에서 실행되는 스레드와 시그널 핸들러 간의 펜스
(함수)
**번역 결과:** **번역 설명:** - ` `, `
`, `` 태그 내의 텍스트는 번역하지 않음
- C++ 관련 용어(`atomic_uint_least32_t`, `_Atomic`, `uint_least32_t`)는 번역하지 않음
- HTML 태그와 속성은 그대로 유지
- (C11)과 같은 버전 표시는 번역하지 않음
- 모든 원본 포맷팅과 구조를 보존
**설명:** - HTML 태그와 속성은 그대로 유지했습니다 - ` `, `
`, `` 태그 내부의 텍스트는 번역하지 않았습니다
- C++ 관련 용어(`atomic_uint_fast64_t`, `_Atomic`, `uint_fast64_t`)는 원문 그대로 유지했습니다
- C11 표시는 프로그래밍 언어 버전을 나타내므로 번역하지 않았습니다
**번역 결과:** **번역 설명:** - ` `, `
`, `` 태그 내의 텍스트는 번역하지 않음
- C++ 관련 용어(`atomic_uintmax_t`, `_Atomic`, `uintmax_t`)는 번역하지 않음
- HTML 태그와 속성은 원본 그대로 유지
- 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 뮤텍스 식별자
뮤텍스를 생성함
(함수)
뮤텍스를 잠글 때까지 블록함
(함수)
뮤텍스를 잠그거나 타임아웃될 때까지 블록함
(함수)
뮤텍스를 잠그거나 이미 잠겨 있으면 블록하지 않고 반환함
(함수)
뮤텍스를 해제함
(함수)
뮤텍스를 파괴함
(함수)
뮤텍스의 타입을 정의함
(열거형)
한 번 호출
함수를 정확히 한 번만 호출함
(함수)

조건 변수

헤더 파일에 정의됨 <threads.h>
cnd_t 조건 변수 식별자
조건 변수를 생성함
(함수)
조건 변수에서 블록된 하나의 스레드를 해제함
(함수)
조건 변수에서 블록된 모든 스레드를 해제함
(함수)
조건 변수에서 블록됨
(함수)
조건 변수에서 블록됨, 타임아웃 포함
(함수)
조건 변수를 파괴함
(함수)

스레드 지역 저장소

헤더 파일에 정의됨 <threads.h>
(C11) (C23에서 제거됨)
스토리지 클래스 지정자 _Thread_local 를 위한 편의 매크로
(키워드 매크로)
tss_t 스레드별 스토리지 포인터
소멸자가 호출되는 최대 횟수
(매크로 상수)
tss_dtor_t
(C11)
함수 포인터 타입 void ( * ) ( void * ) , TSS 소멸자에 사용됨
(typedef)
주어진 소멸자로 스레드별 스토리지 포인터를 생성함
(함수)
(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 뮤텍스