我的程序所需的功能:
使用命令行用戶輸入N和M。 N是將要創建的新線程的數量,並且M是每個線程增加全局變量的數量A。爲什麼使用線程時我的程序輸出總是不一樣?
這是我的代碼:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
static int A = 0;
void *Thread(void* x){
int i;
int n = *((int*)x);
for (i = 0; i<n; i++){
A++;
}
}
int main(int argc, char* argv[]){
int i;
int N = atoi(argv[1]);
int M = atoi(argv[2]);
pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t)*N);
if(!thread){
printf("No memory\n");
exit(2);
}
for (i = 0; i< N; i++){
if (pthread_create(&thread[i], NULL, Thread, &M)){
printf("Not able to create a thread\n");
exit(1);
}
}
for(i = 0; i< N; i++)
pthread_join(thread[i], NULL);
printf("A = %d\n", A);
return 0;
}
的問題是,我每次運行它的時候有不同的輸出。 Screenshot of my terminal when i run the program multiple times in a row
應當保護併發讀/寫訪問變量(此處爲'A')。例如通過使用互斥鎖。 – alk
OT:這個強制轉換'(pthread_t *)'在C中沒用。或者你應該使用C++編譯器嗎? – alk
關於使用互斥鎖:http://stackoverflow.com/q/34524/694576 – alk