您现在的位置:学赛首页 > 研究生院 > 软件学院 > 正文
操作系统第四章-进程同步与通信[2]
http://www.educity.cn 作者:研究生院 来源:学赛网 2008年4月22日 发表评论 进入社区

  退出代码;

  非临界区;

  } }

  算法1的思想

  设置一个公用整型变量turn,用来指示允许进入临界区的进程标识。若turn为0,则允许进程p0进入临界区;否则循环检查该变量,直到turn变为本进程标识;在退出区,修改允许进入进程的标识为1。进程p1的算法与此类似。两个进程的程序结构如下:

  算法1的描述

  int turn=0;

  p0: while (true)

  {

  while (turn!=0);

  进程p0的临界区代码cs0 ;

  turn=1 ;

  进程p0的其他代码;

  }

  算法1的描述(续)

  p1: while (true)

  {

  while (turn!=1);

  进程p1的临界区代码cs1;

  turn=0 ;

  进程p1的其他代码;

  }

  算法1存在的问题

  此算法可以保证互斥访问临界资源,但两个进程必须以交替次序进入临界区。

  此算法不能保证实现空闲让进准则。

  算法2的思想

  设置标志数组flag[ ]表示进程是否在临界区中执行,初值均为假。在每个进程访问临界资源之前,先检查另一个进程是否在临界区中,若不在则修改本进程的临界区标志为真并进入临界区,在退出临界区时修改本进程临界区标志为假。

  算法2的描述

  enum boolean {false,true};

  boolean flag[2]={false,false};

  p0: while (true)

  {

  while flag[1];

  flag[0]=true;

  进程p0的临界区代码cs0 ;

  flag[0]=false ;

  进程p0的其他代码;

  }

  算法2的描述(续)

  p1: while (true)

  {

  while flag[0];

  flag[1]=true;

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]