[英]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.