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

发布时间:2024年01月10日

思维导图:

使用信号灯集完成三个进程的同步,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;
}

运行效果:

?

文章来源:https://blog.csdn.net/m0_62462327/article/details/135511160
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。