使用信号灯集完成三个进程的同步,A进程输出字符A,B进程输出字符B,C进程输出字符C,要求输出结果为ABCABCABCABCABC...
1 #include<head.h>
2 #include"sem.h"
3 int main(int argc, const char *argv[])
4 {
5 int a=0;
6 int semid = create_sem(3);
7 pid_t pid1 = -1;
8 //创建出一个子进程
9 pid1 = fork();
10 if(pid1 == 0)
11 {
12 //P(semid, 0);
13 while(1)
14 {
15 P(semid, 0);
16 a=1;
17 if(a==1)
18 {
19 printf("A");
20 fflush(stdout);
21 a=0;
22 }
23 V(semid, 1);
24 }
25 //V(semid, 1);
26 }else if(pid1 > 0)
27 {
28 //创建一个子进程
29 pid_t pid2 = fork();
30 if(pid2 == 0)
31 {
32 // P(semid, 1);
33 while(1)
34 {
35 P(semid, 1);
36 a=1;
37 if(a==1)
38 {
39 printf("B");
40 fflush(stdout);
41 a=0;
42 }
43 //break;
44 V(semid, 2);
45 }
46 // V(semid, 2);
47 }else if(pid2 > 0)
48 {
49 // P(semid, 2);
50 while(1)
51 {
52 P(semid, 2);
53 a=1;
54 if(a==1)
55 {
56 printf("C");
57 fflush(stdout);
58 a=0;
59 }
60 V(semid, 0);
61 }
62 // V(semid, 0);
63 }else
64 {
65 perror("fork error");
66 return -1;
67 }
68 }else
69 {
70 perror("fork error");
71 return -1;
72 }
73
74 return 0;
75 }