⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pv.c

📁 设有父子2个进程共享一个临界资源
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -