簡體   English   中英

為什么我的for循環在這里變成無限循環?

[英]Why is my for loop becoming an infinite loop here?

我現在有以下代碼:

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個進程並立即將它們加入,以等待它們終止。

我到了printf("Terminated"); 在每個“迭代%d”之后,但它似乎從未增加。

現在,我得到的就是這個輸出的無限循環:

Iteration 1
Terminated
Iteration 1
Terminated
...

為什么這是一個無限循環? 我不太明白。

罪魁禍首可能是這一行:

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

您將指向int的指針轉換為指向void *的指針。 我猜,您使用的是amd64 void *占用8個字節,而int占用4個字節。 因此,您可能會在同一堆棧幀中覆蓋i

正確的做法是聲明void *returnValue並按如下方式調用它:

pthread_join(p, &returnValue);

然后,您可以例如檢查(int)returnValue

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM