华清远见作业第二十五天——IO(第八天)

思维导图:

华清远见作业第二十五天——IO(第八天)_第1张图片

使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC

代码:

#include
#include
#include
#include 
#include 
#include 
#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;
}

运行效果:

 华清远见作业第二十五天——IO(第八天)_第2张图片

你可能感兴趣的:(华清远见作业,c语言)