我现在有这个代码:
void performAction(int n){
int i;
int returnValue;
pthread_t p;
for(i=1; i < n; i++){
printf("Iteration %d",i);
pthread_create(&p, NULL, donothing, NULL);
pthread_join(p, (void**)&returnValue);
if(returnValue == 0){
printf("Terminated");
}
}
}
void* donothing(){
pthread_exit ((void*)0);
}
我的任务是使用pthread create启动n个进程并立即加入它们,等待它们终止。
我在每次&#34;迭代%d&#34;之后到达printf("Terminated");
,但它似乎永远不会增加。
现在我得到的是这个输出的无限循环:
Iteration 1
Terminated
Iteration 1
Terminated
...
为什么这是一个无限循环?我不太明白。
答案 0 :(得分:4)
罪魁祸首可能是这一行:
pthread_join(p, (void**)&returnValue);
您将指向int
的指针转换为指向void *
的指针。让我猜,你在 amd64 ? void *
接受8个字节,而int
占用4个字节。所以你可能会在同一个堆栈框架中覆盖你的i
。
正确的做法是宣布void *returnValue
并将其称为:
pthread_join(p, &returnValue);
然后你可以检查(int)returnValue
。