2
我正在學習線程編程的過程,並且在您從pthread_create調用函數時已經運行測試練習以查看它是如何工作的,但是,在執行此操作時出現奇怪的結果。這裏是我的代碼:從線程打印時的值不一致
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
pthread_t *threads;
typedef struct _file {
int num1;
int num2;
} file;
void thread_run(void *thing) {
file *fp = thing;
printf("num1: %d num2: %d\n", fp->num1, fp->num2);
}
int main(int argc, char **argv) {
threads = (pthread_t *)malloc(atoi(argv[1]));
file *args = malloc(sizeof(file));
args->num1 = 0;
args->num2 = 0;
int i;
for (i = 0; i < atoi(argv[1]); i++) {
args->num1 = i;
args->num2 = i + 1;
pthread_create(&threads[i], NULL, (void *)thread_run, (void *)&args); // the (void *) cast is necessary on my linux distro
}
for (i = 0; i < atoi(argv[1]); i++) {
pthread_join(threads[i], NULL);
}
return 0;
}
什麼,我試圖在這裏,當我在for循環中,我將其全部保存在我的*線程指針創建線程的。
然後我調用帶有一個結構參數的thread_run方法,該結構參數包含兩個打印出來的整數值。
據我所知,這個計劃的預期輸出時./a.out 3運行應該是:
num1: 0 num2: 1
num1: 1 num2: 2
num1: 2 num2: 3
不過,我正在輸出的每個時間不同,但通常是一致類似於:
num1: 34185264 num2: 0
num1: 34185264 num2: 0
num1: 34185264 num2: 0
我已經注意到一些類似主題的問題,但沒有其他用戶似乎遇到我描述的問題。
所以我應該在for循環中每次都有一個malloc? –
此外,代碼將'&args'傳遞給'pthread_create()',它應該在那裏傳遞'args'。 –
@NicholasDry是的,這是一個可能的解決方案 –