1
2.
#include <myhead.h>
#include "sem.h"
int main(int argc, const char *argv[])
{
//创建信号灯集
int semid=create_sem(3);
if(semid==-1){
perror("create _sem error");
return -1;
}
int pid =-1;
int i=0;
pid=fork();//建立三个进程
if(pid >0){
int pid1=-1;
pid1=fork();
if(pid1>0){//进程1
while(1){
sleep(1);
if(i>=5){
break;//判断是否输出了5次
}else{
i++;
P(semid,2);
printf("进程1:“A”\n");
V(semid,0);
}
}
//回收资源
wait(NULL);
wait(NULL);
}else if(pid1==0){//进程2
while(1){
sleep(1);
if(i>=5){
exit(EXIT_SUCCESS);//退出进程
}else{
i++;
P(semid,0);
printf("进程2:“B”\n");
V(semid,1);
}
}
}else{
perror("pid2 fork error");
}
}else if(pid ==0){//进程3
while(1){
sleep(1);
if(i>=5){
exit(EXIT_SUCCESS);//退出进程
}else{
i++;
P(semid,1);
printf("进程3:“C”\n");
V(semid,2);
}
}
}else{
perror("pid fork errpr");
return -1;
}
del_sem(semid);//删除信号集
return 0;
}