📄 3a.c
字号:
#include<unistd.h>#include<stdlib.h>#include<sys/wait.h>#include<stdio.h>#include"sem.c"#define PROJ 0xFFint main(){ pid_t pid; char filenm[]="shared_file1"; int j, i,semid; unsigned short a[8]; key_t semkey; semkey=ftok(filenm,PROJ); semid=semget(semkey,9,IPC_CREAT|0660); for(j=0;j<8;j++) a[j]=0; a[0]=1; set_all_sem(semid,a); for(i=2;i<7;i++) { pid=fork(); if(pid<0) { printf("fork failed"); exit(0); } if(pid==0) break; } switch(i) { case 2: while(1) { sem_p(semid,1); printf("I am process P2\n"); sem_v(semid,3); sem_v(semid,4); } case 3: while(1) { sem_p(semid,2); printf("I am process P3\n"); sem_v(semid,5); } case 4: while(1) { sem_p(semid,3); printf("I am process P4\n"); sem_v(semid,6); } case 5: while(1) { sem_p(semid,4); sem_p(semid,5); printf("I am process P5\n"); sem_v(semid,7); } case 6: while(1) { sem_p(semid,6); sem_p(semid,7); printf("I am process P6\n"); sem_v(semid,0); } case 7: j=5; while(j!=0) { j--; sem_p(semid,0); printf("\nI am process P1\n"); sem_v(semid,1); sem_v(semid,2); } defualt: exit(1); }rm_sem(semid);return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -