使用信号灯集完成三个进程的同步,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);//创建进程1pid1=fork();if(pid1<0){perror("fork1 error");return -1;}else if(pid1>0){//父进程1//创建进程2pid2=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{//进程2while(n--){//申请A的资源P(semid,0);printf("B");fflush(stdout);//释放B的资源V(semid,1);}//退出进程exit(EXIT_SUCCESS);} }else{//进程1while(n--){//申请B的资源P(semid,1);printf("C");fflush(stdout);//释放C的资源V(semid,2);}//退出进程exit(EXIT_SUCCESS); }puts("");//删除信号灯集del_sem(semid);return 0;
}
思维导图