pv.c

来自「设有父子2个进程共享一个临界资源」· C语言 代码 · 共 58 行

C
58
字号
#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<linux/sem.h>int mutexid;		//定义信号量标识int main(){	int chld,i,j;	/*定义数据结构*/	struct sembuf P,V;	union semun arg;		/*创建只含有一个互斥信号量元素的信号量集*/	mutexid=semget(IPC_PRIVATE,1,0666|IPC_CREAT);	/*为信号量赋初值*/			arg.val=1;	if(semctl(mutexid,0,SETVAL,arg)==-1)		perror("semctl setval error"); 	 /*定义P、V操作*/	P.sem_num=0;	P.sem_op=-1;	P.sem_flg=SEM_UNDO;	V.sem_num=0;	V.sem_op=1;	V.sem_flg=SEM_UNDO;	while((chld=fork())==-1);	         //创建子进程	if(chld>0)     		//父进程返回	{		i=1;				while(i<=3)		//循环3次		{		sleep(1);		semop(mutexid,&P,1); //进入临界区前执行P操作		printf("prnt in\n");		sleep(1);		printf("prnt out\n");			semop(mutexid,&V,1); //出临界区执行V操作		i++;			}		wait(0);		//等待子进程终止}     else			//子进程返回	{		j=1;		while(j<=3)	//循环3次		{		sleep(1);		semop(mutexid,&P,1); //进入临界区前执行P操作       		printf("chld in\n");		sleep(1);		printf("chld out\n");		semop(mutexid,&V,1); //出临界区执行V操作		j++;		}		exit(0);		//子进程终止     }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?