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:
















生活中,有一个场景和这个问题很相似。在渡口只有一条小船,能够乘坐一个人;但是没有船桨,也没有船夫,河两岸渡口之间之间拉了一根绳索,可以把船拴在绳索上,然后拉动绳索,把船拉到对岸。拉绳只能一次拉到对岸,动作是不可中断的,这也是过河的唯一途径。
为了过河,河两岸的人都是如何考虑和行动的呢?尤其是当两边都有人要过河时?特别的当两岸同时都来了人要过河时?
其实,人是活的,这时候的人的行为是instant-reaction;假设这里是一个自动机器的世界,行为模式都是固定的,programmed,即两岸乘客都采用一些程式化的步骤进行决策和行动。
它们会先发出某种信号,表明自己要过河、要使用渡船的意愿;然后它们要把船拉到自己这一边来,准备上船;
如果这时候对岸有人发出信号表明自己也要过河,甚至又把船拉了过去,这都是允许,当然只允许一次。一个理性社会的规则最终是“先人后己”的:在上船之前,如果发现对岸有信号,它就会让给对岸的人先使用,让它把船又拉回去,然后等待它过来,两人见面,很是感动,下船的人立刻熄灭信号棒,让一直在等待的好人赶紧过河去……
如果不是“先人后己”的理性社会呢?
假设过河的人都以自己过河要紧,而不考虑别人的需要,只管拉了船来就上,那么两人拉起来就没完没了,谁也用不了船;
假设过河的人都没脑子,看见渡口停的船不见了,就以为有人要过来,就一直等,那也不是个办法。