为什么我的for循环在这里成为无限循环?

时间:2015-09-26 14:05:04

标签: c unix pthreads

我现在有这个代码:

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
...

为什么这是一个无限循环?我不太明白。

1 个答案:

答案 0 :(得分:4)

罪魁祸首可能是这一行:

pthread_join(p, (void**)&returnValue);

您将指向int的指针转换为指向void *的指针。让我猜,你在 amd64 void *接受8个字节,而int占用4个字节。所以你可能会在同一个堆栈框架中覆盖你的i

正确的做法是宣布void *returnValue并将其称为:

pthread_join(p, &returnValue);

然后你可以检查(int)returnValue

相关问题