麵包店算法

"umber[i] umber[0]

算法目的

用於解決多執行緒同步

算法思想

該算法的基本思想源於顧客在麵包店中購買麵包時的排隊原理. 顧客在進入麵包店前, 首先抓一個號, 然後按照號碼由小到大的次序依次進入麵包店購買麵包. 這裡, 麵包店發放的號碼是由小到大的, 但是兩個或兩個以上的顧客卻有可能得到相同的號碼(使所抓號碼不同需要互斥), 如果多個顧客抓到相同的號碼, 則規定按照顧客名字的字典次序進行排序, 這裡假定顧客是沒有重名的. 在計算機系統中, 顧客就相當於進程, 每個進程有一個唯一的標識, 我們用P的下面加一個下標來表示. 例如: 對於 Pi和Pj, 如果有i<j, 則先為Pi服務, 即Pi先進入臨界區

算法代碼

boolean choosing&#91;n&#93;;表示進程是否在取號
int number&#91;n&#93;;記錄每個進程取到的號碼
這些數據結構分別初始化為false和0,為了方便,定義如下符號:
若a<c或a==c和b<d同時成立,(a,b)<(c,d)
do
{
choosing&#91;i&#93; = true;
number&#91;i&#93; = max{number&#91;0&#93;,number&#91;1&#93;,…,number&#91;n-1&#93;}+1;//選號碼
choosing&#91;i&#93; = false;
for(j = 0; j<n; j++)
{
while (choosing&#91;j&#93;);
while ((number&#91;j&#93; != 0) && (number&#91;j&#93;,j)<(number&#91;i&#93;,i));
};
//臨界區
number&#91;i&#93; = 0;
//其餘部分
}while(1);

相關詞條

熱門詞條

聯絡我們