思维导图:
使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <a.h>
#include"sem.h"
int main(int argc, const char *argv[])
{//11、创建并初始化一个信号灯集int semid = create_sem(3);pid_t pid1=-1;//创建出一个子进程pid1=fork();if(pid1==0){while(1){//22、申请0号灯的资源P(semid, 0); printf("A");//33、释放1号灯的资源fflush(stdout);V(semid, 1);sleep(2);//sleep(2);}}else if(pid1>0){pid_t pid2=fork();if(pid2==0){while(1){//22、申请2号灯的资源P(semid, 2); printf("C");//33、释放0号灯的资源fflush(stdout);V(semid, 0);//sleep(2);}}else if(pid2>0){while(1){ //22、申请1号灯的资源P(semid, 1); printf("B");fflush(stdout);//33、释放2号灯的资源V(semid, 2);}}else{perror("fork 2 error");return -1;}}else{perror("fork 1 error");return -1;}return 0;
}
运行效果: