📄 pv.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 + -