面板店算法
来源:互联网 发布:vb改变label标签size 编辑:程序博客网 时间:2024/04/30 14:31
该算法的基本思想源于顾客在面包店中购买面包时的排队原理. 顾客在进入面包店前, 首先抓一个号, 然后按照号码由小到大的次序依次进入面包店购买面包. 这里, 面包店发放的号码是由小到大的, 但是两个或两个以上的顾客却有可能得到相同的号码(使所抓号码不同需要互斥), 如果多个顾客抓到相同的号码, 则规定按照顾客名字的字典次序进行排序, 这里假定顾客是没有重名的. 在计算机系统中, 顾客就相当于进程, 每个进程有一个唯一的标识, 我们用P的下面加一个下标来表示. 例如: 对于 Pi和Pj, 如果有i<j, 则先为Pi服务, 即Pi先进入临界区.
该算法的实现需要如下两个数据结构:
int choosing[n];
int number[n];
前者表示进程是否正在抓号,正在抓号的进程choosing[i]为1,否则为0, 其初值均为0. 后者用来记录各个进程所抓到的号码, 如number[i]为0, 则进程Pi没有抓号, 如number[i]不为0, 则其正整数值为进程Pi所抓到的号码, 其初值均为0.
为了方便起见, 我们定义下述表记法:
● (a,b)<(c,d) 如果 a<c or (a=c and b<d).
● max(a0,…,an-1) 其值为一正整数k, 对于所有i, 0≤i≤n-1, k≥ai.
do
{
choosing[i] = true;
number[i] = max{number[0],number[1],…,number[n-1]}+1;//选号码
choosing[i] = false;
for(j = 0; j<n; j++)
{
while (choosing[j]);
while ((number[j] != 0) && (number[j],j)<(number[i],i));
};
//临界区
number[i] = 0;
//其余部分
}while(1);
理解:
第一个试图进入临界区的进程Pi在没有其它进程竞争时顺利进入其临界区。满足了有空就进的要求。
当有竞争者Pk(i<k),且选的号码相同时,比较进程的名称,通过语句while ((number[j] != 0) && (number[j],j)<(number[i],i));来选择进入的进程。
在Pi进程中j==i时,number[j]==number[i],且j==i所以(number[j],j)<(number[i],i)不成立,退出while语句。j==k时,number[k]==number[i],且k>i所以(number[j],j)<(number[i],i))不成立,退出while语句。对与其它非i和k的j值,number[j]!=0不成立,退出while语句。
在pk进程中j==i时,number[j]<number[k],且j<k,所以(number[j],j)<(number[i],i))成立,故进程Pk陷在该语句中,直到Pi退出临界区执行语句number[i]==0时才允许Pk进程进入其临界区。所以满足了互斥和有限等待的要求。
- 面板店算法
- 面板
- 纯客户端JAVASCRIPT实现的AES算法加密/解密面板(在线keepass?)
- Symbian 面板
- 控制面板
- 控制面板
- 拓展面板
- 状态面板
- Symbian 面板
- 收缩面板
- 隐藏面板
- WPF:面板
- hypermesh 面板
- WPF:面板
- label面板
- 面板组件
- Bootstrap 面板
- Bootstrap面板
- insert first&insert all的区别
- 用非静态成员函数作为线程启动函数
- WPF编程指南读书笔记(3-2)
- iptables中关于limit和limit-burst的解释
- Linux驱动程序入门—Hello World
- 面板店算法
- xml 解析 命名空间
- 基于 J a v a S c r i p t 与 D B G R I D控件的 B / S结构客户端联想式录入技术的设计与实现
- 当疼爱自己的人渐渐老去...
- MyEclipse加jQuery插件
- 【TCP-IP详解卷一:协议】二、IP 协议
- 会凸现出作品的红色
- dotnettextbox在服务器上问题
- 像小张一样