[操作系统]临界区访问与“先人后己”的过河精神
来源:互联网 发布:淘宝批量添加图片 编辑:程序博客网 时间:2024/05/16 11:52
Process Synchronization
---critical section problem(solution for 2 processes)
临界区访问控制机制直观上要满足下面2个要求:1、互斥,即如果Pi在临界区内执行时,该机制要保证同时没有另一个Pj在临界区内执行;
2、让进,即当临界区中没有进程在执行时,如果有进程希望进入临界区,那么该机制要提起决议选择一个准予进入临界区。
为此,共享临界区的进程Pi和Pj可以依赖于两个公共域变量实现互斥访问:
boolean flag[2];
int turn;
initial state:
flag[0] = flag[1] = false;turn的值为1还是0对结果没有影响。
algorithms:
//the program of process[i]
do {
//entry section
flag[i] = true;
turn = j;
while( flag[j] && turn==j ) ;//wait
//critical section
...
//exit seciton
flag[i] = false;
//remaider section
...
}while( 1 );
do {
//entry section
flag[i] = true;
turn = j;
while( flag[j] && turn==j ) ;//wait
//critical section
...
//exit seciton
flag[i] = false;
//remaider section
...
}while( 1 );
生活中,有一个场景和这个问题很相似。在渡口只有一条小船,能够乘坐一个人;但是没有船桨,也没有船夫,河两岸渡口之间之间拉了一根绳索,可以把船拴在绳索上,然后拉动绳索,把船拉到对岸。拉绳只能一次拉到对岸,动作是不可中断的,这也是过河的唯一途径。
为了过河,河两岸的人都是如何考虑和行动的呢?尤其是当两边都有人要过河时?特别的当两岸同时都来了人要过河时?
其实,人是活的,这时候的人的行为是instant-reaction;假设这里是一个自动机器的世界,行为模式都是固定的,programmed,即两岸乘客都采用一些程式化的步骤进行决策和行动。
它们会先发出某种信号,表明自己要过河、要使用渡船的意愿;然后它们要把船拉到自己这一边来,准备上船;
如果这时候对岸有人发出信号表明自己也要过河,甚至又把船拉了过去,这都是允许,当然只允许一次。一个理性社会的规则最终是“先人后己”的:在上船之前,如果发现对岸有信号,它就会让给对岸的人先使用,让它把船又拉回去,然后等待它过来,两人见面,很是感动,下船的人立刻熄灭信号棒,让一直在等待的好人赶紧过河去……
如果不是“先人后己”的理性社会呢?
假设过河的人都以自己过河要紧,而不考虑别人的需要,只管拉了船来就上,那么两人拉起来就没完没了,谁也用不了船;
假设过河的人都没脑子,看见渡口停的船不见了,就以为有人要过来,就一直等,那也不是个办法。
- [操作系统]临界区访问与“先人后己”的过河精神
- 操作系统的临界区的概念
- 操作系统的死锁概念,临界区概念
- 操作系统临界区
- 操作系统06-临界区
- 操作系统 之 临界区 浅析
- 求职笔记-操作系统-临界区,互斥量,信号量,事件的区别
- 互斥量与临界区的作用
- 互斥量与临界区的区别
- 互斥量与临界区的作用
- 临界区的内部结构与实现
- 互斥量与临界区的区别
- 互斥量与临界区的区别
- 互斥量与临界区的作用
- 互斥量与临界区的区别
- 临界区与互斥锁的区别
- 互斥量与临界区的区别
- 临界区的实现与原理
- 绝对调用IE浏览器的弹窗
- Pygame之Tutorials - Import and Initialize
- 在深圳为什么能在任何地方碰到SIAS的校友呢?
- ASP.NET 加密口令
- Asp.Net上传文件示例
- [操作系统]临界区访问与“先人后己”的过河精神
- 通过HtmlInputFile控件上传文件的类
- 难眠的夜晚
- ShootSearch (基于dotlucene的开源搜索引擎)
- ShootSearch 中文分词组件(c#开源)
- 理解接口
- 文件-进程关联演示程序
- 如何度过程序员30岁以后的人生
- 试下这个速度快不快