子プロセスを使って1から2000の合計を計算する必要があるという問題があります。linuxの共有メモリの子プロセスを使って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;
}
しかし、私が実行したときの結果は次のとおりです:ここに私のコードです合計は499500合計は私が間違っている1501500.あるのですか?
あなたのコードをデバッグしてみてください。if内部でvhの印刷をフォークしてループ内で印刷し、何が起こっているのかを確認してください。 –
[linuxの子プロセスを使って1から2000の合計を計算する]の可能な複製(http://stackoverflow.com/questions/42597516/calculate-sum-from-1-to-2000-using-child-process-in- linux) –
なぜループと複数のプロセスを使うのですか?これはGauss式を使った単一の式です。 – Olaf