2012-02-10 3 views
2

저는 리눅스에서 C와 함께 pthreads을 사용하는 데있어 초보입니다. 개인 스레드 변수 을 만들고 사용해야합니다.스레드의 전용 변수

예를 들어 설명해 드리겠습니다. 다음 코드에서는 4 개의 스레드를 만들고, 각 스레드는 개인 변수 foo을 생성하므로 총 4 개의 foo 개의 변수가 각 스레드마다 하나씩 생성됩니다. 각 스레드는 자신의 foo 변수 만 "볼"수 있고 다른 변수는 그렇지 않습니다. 예를 들어 스레드 1foo = 56으로 설정되고 doStuff을 호출하면 doStuff56을 인쇄해야합니다. 2 스레드가 foo = 99으로 설정되고 doStuff을 호출하면 doStuff99을 인쇄해야합니다. 그러나 스레드 1이 다시 doStuff을 호출하면 56을 다시 인쇄해야합니다.

void doStuff() 
{ 
    printf("%d\n", foo); // foo is different depending on each thread 
} 

void *initThread(void *threadid) 
{ 
    // initalize private thread variable (foo) for this thread 
    int foo = something; 

    printf("Hello World! It's me, thread #%ld!, %d\n", (long) threadid, x); 
    doStuff(); 
} 

int main() 
{ 
    pthread_t threads[4]; 

    long t; 
    for (t = 0; t < 4; t++){ 
    printf("In main: creating thread %ld\n", t); 
    pthread_create(&threads[t], NULL, initThread, (void *) t); 
    } 

    pthread_exit(NULL); /* support alive threads until they are done */ 
} 

pthreads를 사용하여 (기본적으로 개인 실 변수의 생각이다)이 작업을 수행하는 방법에 어떤 아이디어?

답변

4

나는 Thread Local Storage이라는 단어를 찾고 있다고 생각합니다. 설명서가 pthread_get_specific, pthread_get_specific, pthread_create_key인지 확인하거나 __thread storage class specifier을 사용하십시오.

또 다른 대안은 하나의 전역 변수를 갖고 뮤텍스를 사용하거나 간단히 인수로 foo를 전달하는 것입니다.

+0

+1 - 너무 오래 pthreads에서 벗어났습니다. lib의 일부로 제공되는 것을 완전히 잊어 버렸습니다. –

+0

감사합니다! '__thread'가 더 쉬운 길로 보인다. 'struct's에 대해서도 제안해야합니까? –