使用共享变量实现进程间通信,创建一个共享变量,并初始化为0,创建一个父进程和两个子进程,子进程A对共享变量的值进行自增,并输出当前的运行的子进程A名字和共享变量值,子进程B对共享变量的值进行自减,并输出当前的运行的子进程B名字和共享变量值,父进程输出最终的共享变量值。
时间: 2024-10-24 11:09:58 浏览: 0
在Unix/Linux系统中,可以利用`fork()`函数和`wait()`函数以及全局整型变量作为共享内存来进行进程间通信。首先,我们创建一个全局整数变量`shared_var`并初始化为0:
```c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
volatile int shared_var = 0; // 共享变量,使用volatile防止编译器优化掉自增操作
void increment(int var) {
shared_var++; // 子进程A增加共享变量值
printf("子进程A (%d): 变量值 %d\n", getpid(), shared_var);
}
void decrement(int var) {
shared_var--; // 子进程B减少共享变量值
printf("子进程B (%d): 变量值 %d\n", getpid(), shared_var);
}
int main() {
pid_t childA_pid, childB_pid;
if ((childA_pid = fork()) == -1) { // 创建子进程A
perror("Fork failed");
exit(EXIT_FAILURE);
}
if (childA_pid == 0) { // 子进程A
increment(shared_var);
exit(0);
}
if ((childB_pid = fork()) == -1) { // 创建子进程B
perror("Fork failed");
exit(EXIT_FAILURE);
}
if (childB_pid == 0) { // 子进程B
decrement(shared_var);
exit(0);
}
// 父进程等待子进程结束
wait(NULL);
printf("父进程: 最终变量值 %d\n", shared_var);
return 0;
}
```
在这个程序中,子进程A和B通过操作`shared_var`来改变其值,然后分别输出自身名称和修改后的值。父进程最后会打印出整个过程中共享变量的最终值。
阅读全文