我有一个问题,我必须使用子进程计算从1到2000的总和。这是我的代码:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <sys/wait.h> /* Needed for the wait function */
#include <unistd.h> /* needed for the fork function */
#include <string.h> /* needed for the strcat function */
#define SHMSIZE 27
int main() {
int shmid;
char *shm;
int tong1=0;
int tong2=0;
if(fork() == 0) {
shmid = shmget(2009, SHMSIZE, 0);
shm = shmat(shmid, 0, 0);
int i;
for(i=0; i<1000; i++) {
tong1=tong1+i;
}
shmdt(shm);
}
else {
shmid = shmget(2009, SHMSIZE, 0666 | IPC_CREAT);
shm = shmat(shmid, 0, 0);
wait(NULL);
int j;
for(j=1000; j<=2000; i++) {
tong2=tong2+j;
}
shmdt(shm);
shmctl(shmid, IPC_RMID, NULL);
}
int tong=0; tong=tong1+tong2;
printf("Sum is: %d",tong);
return 0;
}
但是当我运行时结果是:Sum是499500 Sum是1501500.我哪里错了?
答案 0 :(得分:1)
因为在第二个周期中,您执行的是i++
而不是j++
for(j=1000; j<=2000; i++) { // <== should be j++
tong2=tong2+j;
}
答案 1 :(得分:0)
您正在创建一个共享内存段,但您没有使用它!简单地创建共享内存段不会导致进程之间共享局部变量 - 您需要实际读取和写入共享内存。