2012-03-11 2 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のためのゼロ以外のバック他の何かを得ることができないしてきた、と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

関連する問題