#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/wait.h>
extern int A;
int SHMID;
int *a;
void proces(int i, int increase){
a[i] = i;
A+=increase;
}
int main(int argc, char *argv[]){
int N, M, i;
N=atoi(argv[0]);
M=atoi(argv[1]);
A = 0;
SHMID = shmget(IPC_PRIVATE, sizeof(int)*N, 0600);
if(SHMID == -1){
exit(1);
}
a = (int *)shmat(SHMID, NULL, 0);
for(i=0; i<N; i++){
if(fork() == 0){
proces(i, M);
exit(0);
}
}
for(i=0; i<N; i++)
wait(NULL);
printf("A = %d\n", A);
shmdt((char *)a);
shmctl(SHMID, IPC_RMID, NULL);
return 0;
}
任务是:“编写两个程序-一个创建N个新线程,另一个创建N个新进程。 每个线程或每个进程将公共变量增加M倍。参数N和M作为命令行参数提供。 主程序(即主线程/进程)首先将变量A的初始值设置为零,然后创建默认的线程/进程数,并且当所有线程/进程完成时,将打印变量A的最终值。”
我已经编写了用于创建N个线程的第一个程序,但是在编写用于创建N个进程的第二个程序时遇到了一些问题(上面的一个)。该任务表明两个程序的变量A必须相同。。我对此的解释是,我必须在第一个程序中将变量A声明为全局变量,然后在第二个程序中以相同的方式声明它,但在声明中添加修饰符“ extern”。编译第二个程序时出现的错误是:
在功能proces':
procesi.c:(.text+0x25): undefined reference to
A'中
procesi.c :(。text + 0x30):对A'
/tmp/cc2mFZ94.o: In function
main'的未定义引用:
procesi.c :(。text + 0x70):对A'
procesi.c:(.text+0x124): undefined reference to
A'的未定义引用
collect2:错误:ld返回1退出状态