我開始玩線程(pthreads),我不明白如何預測它們的工作方式。換句話說,我有這個非常簡單的程序,只是增加一個變量:使用線程的意外結果
#include <stdio.h>
#include <pthread.h>
int counter = 0;
void *MyThread(void *arg) {
int i;
for (i = 0; i < 10000; i++) {
counter++;
}
return NULL;
}
int main() {
pthread_t tid[40];
int i;
void *val;
void *MyThread(void *);
for (i = 0; i < 40; i++) {
pthread_create(&tid[i], NULL, MyThread, NULL);
}
for (i = 0; i < 40; i++) {
pthread_join(tid[i], &val);
}
printf("Counter = %d\n", counter);
return 0;
}
我不明白爲什麼它會給出隨機結果!如果我創建(並加入)40個線程,他們怎麼不會完成他們的工作?
一個例子假定它打印出「反=「即所有線程都已完成 –
您必須確保您不會同時在多個線程中更改'counter'。看看pthread_mutex_t。 – this
併發訪問共享資源(這裏的全局變量「counter」)應該被保護/同步。 – alk