[c언어] C 언어에서의 멀티 스레딩 지원

C 언어는 멀티 스레딩을 지원하는 기능이 제한적이지만 여전히 가능합니다. 멀티 스레딩은 프로그램에서 여러 작업을 동시에 처리하기 위해 사용되며, C 언어에서 이를 구현하는 방법은 몇 가지가 있습니다.

POSIX 스레드

POSIX 스레드는 pthread.h 라이브러리를 사용하여 C 언어에서 멀티 스레딩을 지원합니다. 다음은 POSIX 스레드를 사용하여 간단한 예제를 작성한 코드입니다.

#include <pthread.h>
#include <stdio.h>

void *print_message_function(void *ptr) {
  char *message;
  message = (char *)ptr;
  printf("%s \n", message);
}

int main() {
  pthread_t thread1, thread2;
  char *message1 = "Thread 1";
  char *message2 = "Thread 2";
  int iret1, iret2;

  iret1 = pthread_create(&thread1, NULL, print_message_function, (void *)message1);
  iret2 = pthread_create(&thread2, NULL, print_message_function, (void *)message2);

  pthread_join(thread1, NULL);
  pthread_join(thread2, NULL);

  return 0;
}

위의 코드에서 pthread_create 함수를 사용하여 스레드를 생성하고, pthread_join 함수를 사용하여 모든 스레드가 종료되길 기다립니다.

스레드 지역 저장소

C11 표준부터 스레드 지역 저장소를 지원합니다. 각 스레드는 자신만의 지역 저장소를 가질 수 있으므로, 전역 변수의 사용을 피할 수 있습니다.

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

thread_local int tls_var = 0;

int main(void) {
  tls_var = 10;
  printf("tls_var in main: %d\n", tls_var);
  thrd_t thrd;

  thrd_create(&thrd, [](void *) {
    printf("tls_var in thread: %d\n", tls_var);
    return 0;
  }, NULL);
  thrd_join(thrd, NULL);

  return 0;
}

스레드 지역 저장소를 사용하면 각 스레드에서 고유한 변수를 사용할 수 있습니다.

C 언어에서 멀티 스레딩을 구현하는 방법은 다양하지만, 주로 POSIX 스레드 라이브러리를 사용하거나 C11 표준에서 제공하는 스레드 지역 저장소를 활용하는 방법이 일반적입니다.

더 많은 멀티 스레딩 관련 정보는 C 언어 공식 문서에서 확인할 수 있습니다.