2009-06-27 4 views
1

주어진 스레드에 대해 pthread_t이 일정하다고 가정했으나 내 경험에 따르면이 가정을 거짓으로 입증하는 것 같습니다. 주어진 스레드의 ID가 수명 기간 동안 일정하지 않으면 pthread_t을 어떻게 저장할 수 있습니까? 다른 스레드가 pthread_join을 사용하여 스레드가 완료 될 때까지 차단할 수 있습니까?pthreads 스레드에 대한 고유하고 지속적인 식별자?

다른 이유로 인해 내가 pthread_t으로 앞뒤로 변환 할 수있는 스레드에 대한 고유 식별자를 얻는 방법을 아는 것이 유용 할 것입니다. 이 일을하는 방법이 있습니까?

많은 훌륭한 정보가 있지만,이 질문에 대한 유용한 답변을 찾아내는 데 어려움을 겪었습니다. 도움/조언을 제공해 주시면 감사하겠습니다.

편집 : 또한 이유는 모르겠지만 sleep (1)을 추가하고 모든 새 스레드 (스레드 기능 내) 앞에 1 초 동안 잠자기하면 모든 것이 예상대로 작동하는 것 같습니다. 이것은 아마도 빨대로 파악하고 있지만 pthread_t 값이 새 스레드 또는 무언가의 시작 중에 일시적으로 변경 될 수 있습니까 ??

+0

귀하의 'ex peritationation '은 거짓 가정을 증명한다. 내 문제는 실험에 문제가 있다는 것입니다. 'sleep()'을 추가하면 결과가 그 방향으로 향하는 것처럼 보입니다. –

답변

1

pthread_t을 고유하게 사용할 수는 없지만 pthread_equal()을 사용하면 두 개의 스레드 ID가 같은 스레드를 참조하는지 확인할 수 있습니다.

NAME 
    pthread_equal -- compare thread IDs 

SYNOPSIS 
    #include <pthread.h> 

    int 
    pthread_equal(pthread_t t1, pthread_t t2); 

DESCRIPTION 
    The pthread_equal() function compares the thread IDs t1 and t2. 

RETURN VALUES 
    The pthread_equal() function will return non-zero if the thread IDs t1 and t2 
    correspond to the same thread. Otherwise, it will return zero. 
+0

감사합니다. 나는 그것이 기본적으로 나의 문제라고 생각한다. 후속 질문 : 내가받은 적이 있고 저장 한 오래된'pthread_t'는 특정 스레드를 참조하는 데 계속 사용할 수 있습니까? –

+1

안녕하세요, quintus,이 대답을 수락하고 posix 표준을 위반 한 다음번 시도에 대해 새로운 질문을 해보십시오. –

+0

@fistman : posix 표준을 위반한다는 것은 무엇을 의미합니까? 쓰레드를 다룰 때 유일하게 식별 할 수있는 숫자를 원한다는 것은 규칙에 어긋나는가? @Beano : 귀하의 솔루션은 도움이되지만 내 문제가 해결되지 않습니다. pthread_equal은 아무 것도 변경하지 않았습니다. pthread_t는 때때로 구조체이기 때문에 pthread_equal이 사용 된 것으로 생각합니다. 왜냐하면 여러 개의 숫자가 같은 스레드와 관련되기 때문이 아닙니다! 어떤 생각? ... –

0

유니크과의 pthreads 스레드의 정수 식별자?

고유하게 식별 할 수 시작할 때마다 스레드를 확인하려면 :

  • 는 이상이 답변을 참조하십시오 pthread_create

void*에 카운터를 할당 일정하게 증가하는 카운터

  • 사용을 세부 정보 : How to assign unique ids to threads in a pthread wrapper?