1 互斥与同步解决办法之三:
2 信号量方法(semaphores)
3 主要是为了解决“忙等”问题。
4 基本原理:
5 1。多个进程传递信息合作。
6 2。信号量定义为记录型变量s(整型,队列)
7 信号量的定义:
8 type semaphore = record;
9 count:integer;
10 queue:list of process
11 end;
12
13 var s: semaphore;
14
15 定义对信号量的两个原子操作:
16 waits(s) 和 signal(s)
17
18 wait(s){
19 s.count -= 1
20 if(s.count < 0){ //s.count表示正在执行的进程数,如果为负表示等待的进程数
21 进程阻塞;
22 进程进入s.queue队列;
23 }
24 }
25
26 signal(s){
27 s.count += 1;
28 if(s.count <= 0){
29 唤醒队首进程;
30 移出被唤醒的进程;
31 }
32 }
33
34 利用信号量实现互斥的通用模式:
35 program nutualexclusion;
36 const int n;//进程数
37 semaphroe s;//定义一个信号量
38
39 procedure P(int i){
40 waits(s);//等待就绪
41 <临界区>;
42 signal(s);//唤醒进程
43 <其余部分>;
44 }
45 //主程序
46 int main(){
47 P(1);
48 P(2);
49 ...
50 P(n);
51 return 0;
52 }
53
54
55 信号量的物理含义:
56 1。s.count在不同的情况下表示不同的物理含义:
57 (1)s.count = 0 此时表示无资源可用,并且没有进程申请该资源。
58 (2)s.count > 0 表示有资源可用,由于有资源可用,进程等待数自然为0。
59 (3)s.count < 0 表示无资源可用,|s.count|表示等待进程数。
60 2。wait()-signal()的物理含义:
61 (1)wait(s)表示申请资源。可能申请到资源,也可能进入进程等待队列。
62 (2)signal(s)表示释放资源,并且唤醒等待队列首进程。
操作系统学习笔记(9) 互斥和同步的信号量算法
最新推荐文章于 2023-07-12 13:31:14 发布