首页 > 百科文章正文

Dekker算法

百科 2023-02-10 18:02:30 admin
后台-插件-广告管理-内容页头部广告(手机)

Dekker互斥算法是由荷兰数学家Dekker提出的一种解决并进程互斥与同步的商古硫冷软件实现方法。

  • 中文名称 Dekker算法
  • 外文名称 Dekker algorithm
  • 提出者 荷兰数学家Dekker
  • 解决问题 并发进程互斥与同步
  • 类别 并发编程的算法

参数说

  两个全局共享的状态变量苏其坚略米差深黄flag[0]和flag[1],表示临界区状态及哪个进程想要占用临界区,初始值为0。

  较命明准章静教全局共享变量turn(值为1或0)表示能进入临界区的进程序号,初始值任意,一般为0。

算法原理

  设有进程P0和P1,两来自者谁要访问临界区,就让慢底径刻剧客应至宣对应的flag=true(例如P0要访问临界区,就让flag[0]=true),相当于"举手示意我要访问"。初始值为0表示一开始没人要访问

  turn用于标360百科识当前允许谁进入,turn=0则P0可进入,turn=1则P1可进入。

  1)P0的逻辑

  do{

  flag[0德父耐植载件模求苗阻青] = true;// 首先P0举手示意我要访问

  while(flag[1]) {// 看看P1是否也举手了

  if(turn==1){// 如果P1也举手了,那么就看看到底轮到谁

  flag[序干种班出抓升许被至于0]=false爱告;// 如果确实轮到P1,那么P0先把手放下(让P1先)

  while(turn==1);// 只要还是P1的时间,P0就不举手,一直等

  flag[0]=true;// 等到P1用完了(轮到P0了),P0再举手

  }

  flag[1] = false; // 只要可以跳出循环,说明P1用完了,应该跳出最外圈的while

  }

  式速师皇句visit();// 访问临界区

  turn = 1;// P0访问完了,把轮次交给P1,让P1可以访问

  flag[0]=false;// P0放下手

  2)P1的逻辑

  do太小境马叶抓罪子进话{

  flag[1] = true;// 先P1举手察责示意我要访问

  while(flag[0]) {// 如果P0是否也举手了

  if(turn==0){// 如果P0也举手了,那么久看看到底轮到谁

  f娘者校lag[1]=false;// 如果确实轮到P0,那么P1先把手放下(让P0先)

  while(turn==0);// 只要还是P0的时间,P1就不举钱市衣乙台父根容手,一直等

  flag[1]=true;// 等到P0用完了(轮到P1了),P1再举手

  }

  flag[0] = fals推课向坏e; // 只要可以跳出循环,说明P0用完了,应该跳出最外圈的while

  }

  visit();// 访问临界区

  turn = 0;// P1访问完了,把轮次交煤官当解素革再乱盟今给P0,让P0可以访问

  帝操flag[1]=false;// P1放下手

代码实

  实现方法:

  boolean flag[2];

  int turn;

  void procedure0()

  {

  while(tr来自ue)

  {

  flag[0]=true;

  while(flag[1]==true)

  {

  if哪万伟值族犯害为(turn==1)

  {

  flag[0]=false;

  while(turn==1)

  {

  /*do noth叫象水病总频欢夫代增乎ing*/

  }

  flag[0]=true;

  }

  }

  /*critical section*/ ;

  turn=1;

  flag[0]=false;

  /*remainder section*/

  }

  360百科}

  void proc周白edure()

  {

  while(true)

  {

  flag[1]=true;

  while(flag夜微冷末殖[0]==true)

  {

  if(turn==0)

  {

  flag[1]=false;

  while(turn==0)

  {

  /*do nothing*/

  }

  flag[1]=true;

  }

  }

  /*criti念谁望弱cal section*/ ;

  turn=0;

  flag[1]=false;

  /*remainder section*/

  }

  }

  void main()

  {

投迫云图吗从下过基  flag[0]=flag[1]=0;

  turn=1;

  /*start p交友rocedure0 and procedure1*/ ;

  }

后台-插件-广告管理-内容页尾部广告(手机)

标签:

发表评论

评论列表

晴空网Copyright @ 2011-2023 All Rights Reserved. 版权所有 豫ICP备2022028056号 帝国CMS强力驱动 站长微信:88888888 统计代码