桌子上有一个盘子,每次只能放一个水果.爸爸专门向盘子里放苹果,妈妈专门向盘子里放橘子,一个儿子专门等吃盘子中的橘子,一个女儿专门等吃盘子中的苹果.用信号量实现他们间的同步机制.

来源:互联网 发布:windows驱动程序包很多 编辑:程序博客网 时间:2024/04/28 18:34
题目: 桌子上有一个盘子,每次只能放一个水果.爸爸专门向盘子里放苹果,妈妈专门向盘子里放橘子,一个儿子专门等吃盘子中的橘子,一个女儿专门等吃盘子中的苹果.用信号量实现他们间的同步机制.

解:
    1:盘子是临界资源.要实施互斥. 用信号量 f 表示.
     2:苹果用 a 表示.  橘子用 o 表示.
     3:盘子的状态(空,或者满) 用 e 表示.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
semphore: f=1, e=1, a=0, o =0;
 
ProcessDad(){
    semWait(e);//盘子中是否空
        semWait(f);//是否有人在用盘子,f保证盘子被独占。
            setApple();
            semSignal(a);//通知放了一个苹果
        semSignal(f); 
}
 
ProcessMom(){
    semWait(e);
        semWait(f);
            setOrange();
            semSignal(o);
        semSignal(f); 
}
 
ProcessSon(){
    semWait(o);    //是否有橘子
        semWait(f); //是否有人在用盘子
            eatOrange();
            semSignal(e); //通知盘子为空
        semSignal(f);
}
 
ProcessDaughter(){
    semWait(a);
        semWait(f);
            eatApple();
            semSignal(e);
        semSignal(f);
}
0 0
原创粉丝点击