因此,任务是:“编写两个程序-一个创建N个新线程,另一个创建N个新进程。 每个线程或每个进程将公共变量A增加M倍。参数N和M作为命令行参数提供。 主程序(即主线程/进程)首先将变量A的初始值设置为零,然后创建给定数量的线程/进程,并且当所有线程/进程完成时,将打印变量A的最终值。”
首先,我对“这两个程序的公共变量”的解释是,我将变量A声明为全局变量。然后,在另一个程序中,我将向其添加“ extern”修饰符。 (不知道这是一个很好的解释)
这里的问题是如果我输入命令行参数3和10,则代码应创建3个新线程,并且每个线程应将变量A增加10,结果应为A = 30,但我的代码得出A =0。有人知道吗关于代码中的问题在哪里? (这是创建N个线程的第一个程序)
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int A;
void *dretva(void *argument){
int *increase = argument;
A=A + *increase;
sleep(1);
return NULL;
}
int main(int argc, char *argv[]){
int i, j, N, M;
N=atoi(argv[0]);
M=atoi(argv[1]);
pthread_t tid[N];
A = 0;
for(i=0; i<N; i++){
if(pthread_create(&tid[i], NULL, &dretva, &M)){
printf("Can't create new thread\n");
exit(1);
}
}
for(j=0; j<N; j++)
pthread_join(tid[j], NULL);
printf("A = %d\n", A);
return 0;
}