2011-05-21 23 views
0

如何定義與忙等待解決一個信號??我有這樣的事情如何定義一個信號量與忙等待解決方案

wait(Semaphore s){ 
s=s-1; 
if (s<=0) { 
    // add process to queue 
    block(); 
} 
} 

signal(Semaphore s){ 
s=s+1; 
if (s<0) { 
    // remove process p from queue 
    wakeup(p); 
} 
} 

,但我不明白,在信號塊所需的條件

(s)

if(s < 0){ //從隊列中刪除進程p 喚醒(p); }

爲什麼我們要檢查,如果(一個或多個< 0)這裏

回答

0

條件也許應該檢測是否存在隊列中沉睡的任何過程(阻止)。然而,我認爲這些條件是不正確的,考慮到二元信號量的行爲(信號量最初爲s == 1),僞代碼應該是

wait(Semaphore s){ 
    s=s-1; 
    if (s<0) { 
    // add process to queue 
    block(); 
    } 
} 

signal(Semaphore s){ 
    s=s+1; 
    if (s<=0) { 
    // remove process p from queue 
    wakeup(p); 
    } 
}