0
我正在學習如何在C使用線程,並且想使用一個工人功能(一用一「void* helperFunc(void *arg)
」簽名)來調用一個普通函數,並將它傳遞的時候數組中整數的地址。ç線程使垃圾輸出訪問非共享資源
有時,輸出將是正確的(零的列表)。其他時候,將會有垃圾值而不是0.
沒有任何線程試圖訪問共享資源,並且我相信我已經正確初始化了數組,所以我不明白垃圾值來自哪裏。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
#define N 10
void runMe(int *arg) {
printf("Hello %d\n", *arg);
}
void *helperFunc(void *arg){
runMe((int*)arg);
}
int run_threads(void){
pthread_t thread[N];
int num[N] = {0};
int i = 0;
for (i = 0; i < N; i++){
pthread_create(&(thread[i]), NULL, helperFunc, &(num[i]));
}
}
int main(){
run_threads();
sleep(1);
return 0;
}
預期輸出:
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
實際輸出:
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 0
Hello 32757
Hello 4195339
Hello 0
Hello -334463544
任何幫助,將不勝感激。
謝謝。我已經通過使用malloc來爲整數分配空間來糾正問題。 –
@ChrisJolly:如果你打算做任何事情與陣列有用,你需要考慮一下返回,以便它可以被釋放,並擔心你將如何等待線程退出('睡眠(1)'笨拙 - ''pthread_join()'?)等等。也許這就是未來;讓它乾淨地工作是一個開始。 –
謝謝。我已經返回使用int數組,並且使用pthread_join來允許它們在run_threads返回之前完成執行。 –