【发布时间】:2013-10-17 16:16:08
【问题描述】:
以下代码无法加入 pthreads,并打印消息“加入失败”。如何获取有关故障及其原因的更多信息?
pthread_t aThread[MAX_LENGTH];
int errCode[MAX_LENGTH];
char returnVal;
for(int i = 0; i < MAX_LENGTH; i++)
{
if((errCode[i] = pthread_create(&aThread[i], NULL, &findMatch, &fpArgs)) != 0)
printf("error creating thread %d\n", errCode[i]);
if(!pthread_join(aThread[i], (void**)&returnVal))
printf("join failed\n i is %d", i);
}
编辑: 实际上加入返回了no error,我犯了一个错误。 if 语句不应该有 !,因为如果存在计算结果为 true 的问题,则 join 返回一个非零数字。
【问题讨论】:
-
您将
returnVal地址转换为void**是未定义行为。除非sizeof(char) == sizeof(void*)在你的系统上(我可以向你保证它是不是)它看起来不像你在使用它,NULL 是一个可行的选择,所以你可能只是pthread_join(aThread[i], NULL);此外,pthread_join返回零 (0) 成功,因此使用!测试它是否失败是倒退的。最后,无论如何你都不想这样做,你想全部启动它们,然后加入它们。你在这里所拥有的实际上并不比单线程好。
标签: c multithreading pthreads errno pthread-join