9

pthread_joinからの戻り値を出力しようとしています。私は次のコードを持っています:

    for(j = 0 ; j < i ; ++j){
        pthread_join( tid[j], returnValue);  /* BLOCK */
        printf("%d\n",  (int)&&returnValue);
}

すべてのスレッドはtid配列に格納され、正しく作成されて返されます。各スレッド関数の最後に、次の行があります。

pthread_exit((void *)buf.st_size);

読んでいたファイルのサイズを返そうとしています。なんらかの理由で正しい値を出力できません。それは、pthread_join関数呼び出しからvoid **を逆参照しようとしている方法である可能性が高いですが、それを実行する方法がよくわかりません。助けてくれてありがとう。

4

2 に答える 2

15

void *に変数のアドレスを渡す必要がありますpthread_join-- 終了値が入力されます。次に、呼び出しvoid *によって最初に格納された型にキャストバックする必要があります。pthread_exit

for(j = 0 ; j < i ; ++j) {
    void *returnValue;
    pthread_join( tid[j], &returnValue);  /* BLOCK */
    printf("%zd\n",  (size_t)(off_t)returnValue);
}
于 2012-11-10T01:14:02.363 に答える
0

これは機能しています:

for(j = 0 ; j < i ; ++j) {
    int returnValue;
    pthread_join( tid[j], (void **)&returnValue);  /* BLOCK */
    printf("%d\n",  returnValue);
}
于 2017-11-08T17:49:01.357 に答える