一.实验目的:
输出个人信息(学号、姓名);
实现同步父进程、子进程按序输出。
二.实验原理:
Linux C语言编程,使用信号量系统调用同步进程
- 实验环境:
虚拟机(VMware)
三.代码模块:
#include<stdio.h>
#include<unistd.h>
#include<fcntl.h>
#include<semaphore.h>
void main()
{
pid_t pid;
int i;
sem_t *pm1,*pm2;
pm1 = sem_open("mutex1",O_CREAT|O_RDWR,0666,0);
pm2 = sem_open("mutex2",O_CREAT|O_RDWR,0666,1);
printf("吴XX, 学号: 21XXXXXXX\n");
pid = fork();
if(pid <0)
printf("error!\n");
else if(pid ==0)
{
srandom(getpid());
for(i=0;i<10;i++)
{
sem_wait(pm1);
printf("child %d\n",i);
usleep(random()%1000000);
sem_post(pm2);
}
}
else
{
srandom(getpid());
for(i=0;i<10;i++)
{
sem_wait(pm2);
printf("parent %d\n",i);
usleep(random()%1000000);
sem_post(pm1);
}
wait();
}
sem_close(pm1);
sem_close(pm2);
sem_unlink("mutex1");
sem_unlink("mutex2");
return;
}
在本次实验中,我们编写了一个简单的C语言程序。程序包含了父进程和子进程,通过信号量系统调用实现进程同步。在程序执行时,首先输出个人信息(学号、姓名),然后父进程和子进程按序输出数字。
通过本次实验,我们学习了Linux中的信号量系统调用,掌握了进程同步的基本技能。实验中还锻炼了我们的编程能力和问题解决能力,同时让我们更加深入地理解了操作系统中进程的管理和调度机制。