思维导图
使用信号灯集,完成3个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABCABCABCABC.........
#include<header.h>
#include"sem.h"
int main(int argc, const char *argv[])
{
//创建信号灯集
int semid=create_sem(3);
//定义一个进程号变量,创建子进程
pid_t pid=-1;
pid=fork();
if(pid>0)
{
//进程A
while(1)
{
//申请0号灯资源
P(semid,0);
printf("A");
fflush(stdout);
//释放1号灯资源
V(semid,1);
sleep(1);
}
}
else if(pid==0)
{
//定义一个进程号变量,创建子进程
pid_t pid1=-1;
pid1=fork();
if(pid1>0)
{
//进程B
while(1)
{
//申请1号灯资源
P(semid,1);
printf("B");
fflush(stdout);
//释放2号灯资源
V(semid,2);
sleep(1);
}
}
else if(pid1==0)
{
//进程C
while(1)
{
//申请2号灯资源
P(semid,2);
printf("C");
fflush(stdout);
//释放0号灯资源
V(semid,0);
sleep(1);
}
}
else
{
perror("fork error");
return -1;
}
}
else
{
perror("fork error");
return -1;
}
//删除信号灯集
delete_sem(semid);
wait(NULL);
wait(NULL);
return 0;
}