我不是 100% 确定如何解释这一点,最好在代码中查看。
#include <unistd.h>
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <pthread.h>
#define N 30
using namespace std;
int ZajednickoPolje[50][N];
void *Generiraj(void * i){
for(int j=0;j<N;j++)
ZajednickoPolje[*((int*)i)][j]=rand()%50;
}
void *Racunaj(void * i){
int suma=0;
for(int j=0;j<N;j++)
suma=suma+ZajednickoPolje[*((int*)i)][j];
sleep(1);
cout<<"Polje"<<*((int*)i)<<" suma = "<<suma<<endl;
sleep(1);
cout<<"Polje"<<*((int*)i)<<" aritm_sredina = "<<float(suma)/N<<endl;
}
int main(){
int M, i;
cin>>M;
pthread_t thr_id[M*2];
for(i=0;i<M;i++)
if (pthread_create(&thr_id[i], NULL, Generiraj, &i) != 0) {
cout<<"Greska pri stvaranju dretve!\n";
exit(1);
}
for(i=M;i<(2*M);i++)
if (pthread_create(&thr_id[i], NULL, Racunaj, &i) != 0) {
cout<<"Greska pri stvaranju dretve!\n";
exit(1);
}
for(int i=0;i<(2*M);i++)
pthread_join(thr_id[i], NULL);
return 0;
}
所以,我想在主函数中将变量“i”传递给函数“Geneiraj”和“Racunaj”,但它的值总是 M*2。我明白为什么会发生这种情况,但不知道如何解决?