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 回答