使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC...
#include<myhead.h>
#include "sem.h"
int main(int argc, const char *argv[])
{
pid_t pid1=-1;
pid_t pid2=-1;
int n=5;
//创建信号灯集
int semid=create_sem(3);
//创建进程1
pid1=fork();
if(pid1<0)
{
perror("fork1 error");
return -1;
}
else if(pid1>0)
{
//父进程1
//创建进程2
pid2=fork();
if(pid2<0)
{
perror("fork2 error");
return -1;
}
else if(pid2>0)
{
//父进程2
//进程3
while(n--)
{
//申请C的资源
P(semid,2);
printf("A");
fflush(stdout);
//释放A的资源
V(semid,0);
}
//回收子进程
wait(NULL);
wait(NULL);
}
else
{
//进程2
while(n--)
{
//申请A的资源
P(semid,0);
printf("B");
fflush(stdout);
//释放B的资源
V(semid,1);
}
//退出进程
exit(EXIT_SUCCESS);
}
}
else
{
//进程1
while(n--)
{
//申请B的资源
P(semid,1);
printf("C");
fflush(stdout);
//释放C的资源
V(semid,2);
}
//退出进程
exit(EXIT_SUCCESS);
}
puts("");
//删除信号灯集
del_sem(semid);
return 0;
}
思维导图