我有一个任务,我把头撞在墙上。它在 C 中。我感觉我接近解决方案,但是我无法让程序执行所需的操作。我正在更改数字和一些小细节,因为大多数班级都和我一样难过。
要求:创建3个进程,第一个将共享内存变量“total->value”从1增加到10000,第二个从10000增加到12000,第三个从12000增加到14000
流程函数被标记为(process1(),process2(),process3()),这些函数的内部如下
process1()
{
int k = 0;
while (k < 10000)
{
k++;
total->value = total->value + 1;
}
printf("From process 1 = %d/n", total->value);
}
第二个是 k < 2000 (因为它只需要增加共享值 2000 更多)等等。
该计划的主要部分是:
main()
{
int shmid;
int pid1;
int pid2;
int pid3;
int ID;
int status;
char *shmadd = (char *)0;
/* Create and connect to a shared memory segmentt */
if ((shmid = shmget(SHMKEY, sizeof (int), IPC_CREAT | 0666)) < 0)
{
perror("shmget");
exit(1);
}
if ((total = (shared_mem *)shmat(shmid, shmadd, 0)) == (shared_mem *)-1)
{
perror("shmat");
exit(0);
}
total->value = 0;
if ((pid1 = fork()) == 0)
process1();
if ((pid1 != 0) && (pid2 = fork()) == 0)
process2();
if ((pid1 != 0) && (pid2 != 0) && (pid3 = fork()) == 0)
process3();
if ((pid1 != 0) && (pid2 != 0) && (pid3 != 0))
{
if ((shmctl(shmid, IPC_RMID, (struct shmid_ds *)0)) == -1)
{
perror("shmctl");
exit(-1);
}
printf("\t\t End of Program.\n");
}
}
我需要的是在第二个开始之前完成第一个过程。我尝试在 process1() (或 2 个或 3 个)调用之后插入一个 wait(&status) 并且不知所措。任何指针?(没有双关语)=)还有更多要实现的,但我相信一旦我有了这部分,我就可以自己处理剩下的部分。我在某些方面故意含糊其辞,但我想完成这个项目,更重要的是理解它,还有其他人想要免费午餐。我将在所需的代码中提供任何其他内容。预先感谢您的帮助
输出应该出现
From process 1 = 10000
From process 2 = 12000
From process 3 = 14000