2012-03-11 3 views
0

는 :C에서 pthread를 처음 사용하는 이유는 무엇입니까? 다음 코드에서

int main (int argc, const char * argv[]) { 
    // insert code here... 

    pthread_t t1, t2; 
    int sp1, sp2; 

    sp1 = pthread_create(&t1, NULL, getScalarProduct, NULL); 
    sp2 = pthread_create(&t2, NULL, getScalarProduct, NULL); 
    pthread_join(t1, NULL); 
    pthread_join(t2, NULL); 

    printf("Seperate scalars: %d %d\n", sp1, sp2); 
    finalScalarProd = sp1 + sp2; 


    printf("Result: %d\n", finalScalarProd); 

    return 0; 
} 

나는 finalScalarProduct에 0보다 다시 다른 것을 얻을 수 없습니다 있었고, SP1 및 SP2 모두는 제로이다. 나는 그것이 pthread_join에 전달되는 NULL 인수와 관련이 있다고 생각한다. 나는이 주장이 무엇인지 이해하지 못한다.

도움을 주셨습니다.

+1

'pthread_create'의 리턴은 스레드 함수의 리턴이 아닙니다. 스레드 함수는 반환 할 때까지 아직 실행되지 않을 수도 있습니다. 'pthread_create'의 리턴은 단순히 성공 또는 실패를 나타냅니다. – Puppy

답변

3

pthread_create returns zero upon success 때문입니다. 이 값은 주 스레드 함수의 결과가 아니라 스레드 생성 결과입니다 (일부 경우에는 실패 할 수 있음).

void * threadMainFunc(void * arg) { 
    // modify arg like this 
    int * ip = (int *)arg; 
    *ip = 3; // this is the "return value" 
    return NULL; 
} 

pthread_create(&t1, NULL, threadMainFunc, &sp1); 
+0

return (scalarProd)에서 반환 값을 얻으려면 어떻게해야합니까? – Chucky

+0

pthread_create ('arg' 매개 변수)에서 변수에 대한 포인터를 전달해야합니다. – MByD

+0

여기에 포인터 이론으로 고생하고 있습니다. 나에게 코드를 보여주고 설명 할 수 있습니까? – Chucky

관련 문제