[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 언어 공식 문서에서 확인할 수 있습니다.