수색…


소개

C11에는 표준 스레드 라이브러리 인 <threads.h> 가 있지만 아직 구현되지 않은 알려진 컴파일러는 없습니다. 따라서 C에서 멀티 스레딩을 사용하려면 pthread.h 헤더를 사용하여 POSIX 스레드 라이브러리 (종종 pthreads라고 함)와 같은 플랫폼 특정 구현을 사용해야합니다.

통사론

  • thrd_t // 스레드를 식별하는 구현 정의 완료 객체 유형
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // 스레드를 만듭니다.
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // 인수가 같은 스레드를 참조하는지 확인
  • thr_t thrd_current (void); // 호출하는 스레드의 식별자를 반환합니다.
  • int thrd_sleep (const struct timespec * duration, struct timespec * remaining); // 적어도 지정된 시간 동안 호출 스레드 실행을 일시 중단합니다.
  • void thrd_yield (void); // 다른 스레드를 호출하는 스레드 대신 실행하도록 허용
  • _Noreturn void thrd_exit (int res); // 스레드를 호출하는 스레드를 종료합니다.
  • int thrd_detatch (thrd_t thr; // 현재 환경에서 지정된 스레드를 분리합니다.
  • int thrd_join (thrd_t thr, int * res); // 주어진 스레드가 종료 될 때까지 현재 스레드를 차단합니다.

비고

스레드를 사용하면 http://www.riptutorial.com/c/example/2622/data-race 와 같은 추가 정의되지 않은 동작이 발생할 수 있습니다. 다른 스레드간에 공유되는 변수에 대한 무 경쟁 액세스를 위해 C11은 mtx_lock() 뮤텍스 기능 또는 (선택 사항 인) http://www.riptutorial.com/c/topic/4924/atomics 데이터 유형 및 관련 함수를 제공합니다. stdatomic.h .

간단한 예제 C11 스레드

#include <threads.h>
#include <stdio.h>

int run(void *arg)
{
    printf("Hello world of C11 threads.");

    return 0;
}

int main(int argc, const char *argv[])
{
    thrd_t thread;
    int result;

    thrd_create(&thread, run, NULL);

    thrd_join(&thread, &result);

    printf("Thread return %d at the end\n", result);
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow