Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어의 pthread_equal() 함수 – 두 스레드가 같은지 비교하는 방법

C 언어의 pthread_equal() 함수는 POSIX 스레드(pthread) 환경에서 두 스레드가 서로 동일한지 확인할 때 사용하는 함수입니다. 이 함수는 0 또는 0이 아닌 값을 반환하는데, 두 스레드가 같으면 0이 아닌 값(참)을 반환하고, 다르면 0을 반환합니다.

함수 문법

int pthread_equal(pthread_t th1, pthread_t th2);

여기서 th1th2는 비교하고자 하는 두 스레드의 식별자입니다. 참고로 pthread_t 타입은 내부 구조가 시스템마다 다를 수 있으므로, == 연산자로 직접 비교하지 말고 반드시 pthread_equal() 함수를 사용해야 합니다. 또한 현재 실행 중인 스레드의 ID를 얻으려면 pthread_self() 함수를 활용합니다.

예제 1: 자기 자신 스레드와 비교하기

먼저 현재 실행 중인 스레드를 저장된 스레드와 비교하여 결과를 확인해 보겠습니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>

pthread_t sample_thread;

void* my_thread_function(void* p) {
    if (pthread_equal(sample_thread, pthread_self())) { // pthread_self()는 현재 스레드 ID를 반환
        printf("Threads are equal\n");
    } else {
        printf("Threads are not equal\n");
    }
}

main() {
    pthread_t th1;
    sample_thread = th1; // th1 스레드를 다른 스레드 객체에 할당
    pthread_create(&th1, NULL, my_thread_function, NULL); // 스레드 생성
    pthread_join(th1, NULL); // 메인 스레드에서 해당 스레드 종료 대기
}

실행 결과

Threads are equal

생성된 스레드 내부에서 sample_threadpthread_self()가 가리키는 스레드가 동일하므로 "Threads are equal"이 출력됩니다.

예제 2: 서로 다른 두 스레드 비교하기

이번에는 서로 다른 두 스레드를 비교했을 때 어떤 결과가 나오는지 확인해 보겠습니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>

pthread_t sample_thread;

void* my_thread_function1(void* ptr) {
    sample_thread = pthread_self(); // 첫 번째 스레드의 ID를 저장
}

void* my_thread_function2(void* p) {
    if (pthread_equal(sample_thread, pthread_self())) { // 현재 스레드 ID와 비교
        printf("Threads are equal\n");
    } else {
        printf("Threads are not equal\n");
    }
}

main() {
    pthread_t th1, th2;
    pthread_create(&th1, NULL, my_thread_function1, NULL); // 첫 번째 스레드 생성
    pthread_create(&th2, NULL, my_thread_function2, NULL); // 두 번째 스레드 생성
    pthread_join(th1, NULL); // 첫 번째 스레드 종료 대기
    pthread_join(th2, NULL); // 두 번째 스레드 종료 대기
}

실행 결과

Threads are not equal

첫 번째 스레드에서 저장한 ID와 두 번째 스레드의 ID는 서로 다르므로 "Threads are not equal"이 출력됩니다.

정리

pthread_equal()은 멀티스레드 프로그래밍에서 특정 작업이 현재 스레드에서 실행 중인지 판단하거나, 스레드 간 충돌을 방지하는 로직을 구현할 때 유용하게 활용됩니다. 스레드 ID 비교 시에는 항상 이 함수를 사용하는 것이 안전하며, 이식성 측면에서도 권장되는 방식입니다.