互斥:软件方法实现之Peterson算法
2011-12-20 13:40
330 查看
德国数学家Dekker曾提出了两个进程互斥的算法,不过Dekker算法过于复杂。而Peterson提出了简单且一流的方法。
实现如下:
boolean flag[2];
int turn;
void P0()
{
while(true)
{
flag[0]=true;
turn=1;
while(flag[1]&&turn==1)
/* donothing*/ ;
/*critical section*/ ;
flag[0]=false;
}
}
void P1()
{
while(true)
{
flag[1]=true;
turn=0;
while(flag[0]&&turn==0)
/* donothing*/ ;
/*critical section*/ ;
flag[1]=false;
}
}
void main()
{
flag[0]=flag[1]=false;
/*start p0 and p1*/ ;
}
说明:
考虑进程P0,一旦它设置flag[0]=true,则P1不能进入临界区。如果P1已经进入临界区,那么flag[1]=true,P0被阻塞不能进入临界区。
另一方面,互相阻塞也避免了。假设P0在while里被阻塞了,表示flag[1]为true且turn=1,则此时P1可以执行。
实现如下:
boolean flag[2];
int turn;
void P0()
{
while(true)
{
flag[0]=true;
turn=1;
while(flag[1]&&turn==1)
/* donothing*/ ;
/*critical section*/ ;
flag[0]=false;
}
}
void P1()
{
while(true)
{
flag[1]=true;
turn=0;
while(flag[0]&&turn==0)
/* donothing*/ ;
/*critical section*/ ;
flag[1]=false;
}
}
void main()
{
flag[0]=flag[1]=false;
/*start p0 and p1*/ ;
}
说明:
考虑进程P0,一旦它设置flag[0]=true,则P1不能进入临界区。如果P1已经进入临界区,那么flag[1]=true,P0被阻塞不能进入临界区。
另一方面,互相阻塞也避免了。假设P0在while里被阻塞了,表示flag[1]为true且turn=1,则此时P1可以执行。
相关文章推荐
- 互斥:软件方法实现之Peterson算法
- 互斥:软件方法实现之Peterson算法
- 软件实现临界区互斥的方法总结思考(四种算法的递进推导)
- 互斥的软件实现:Peterson算法和Dekker算法
- Peterson算法(软件实现互斥)
- bash实现互斥、信号量的方法
- WinForm通过操作注册表实现限制软件使用次数的方法
- Java--线程的互斥实现(两种方法)
- 实现软件滤波方法及其示例程序
- windows中使用Findwindow函数与FindWindowEx函数来实现自动控制、触发第三方软件事件的方法
- 今日头条刷粉丝软件助手,刷关注有办法可以刷,只是慢了点,分享快速实现刷头条粉丝方法
- 软件中包含OCR功能模块实现方法
- C#实现读取注册表监控当前操作系统已安装软件变化的方法
- Python 实现Windows开机运行某软件的方法
- windows8将软件固定到任务栏具体实现方法图解
- 多线程同步互斥的四个实现方法图
- Vue2.0 实现单选互斥的方法
- 多线程同步和互斥的实现方法
- 最优视频监控软件开发的实现方法
- 20120822-[转]单片机实现软件复位(软复位)的方法及讨论