2015-09-26 32 views
0

我新的操作系統,我沒有得到解決生產者消費者問題, 生產者進程給出解決生產者消費者

item nextProduced; 
while(true) 
{ 
    while(((in+1)%BUFFER_SIZE)==out) 
     ; /* do nothing */ 
    buffer[in]=nextProduced; 
    in=(in+1)% BUFFER_SIZE; 
} 

和消費過程中逐

給出
item nextConsumed; 
while(true) 
{ 
    while(in==out) 
     ; /* do nothing */ 
    nextConsumed=buffer[out]; 
    out=(out+1)% BUFFER_SIZE; 
} 

什麼,我沒有得到IS- 這是寫在書中,在界緩衝區的情況下,消費者必須等待,如果緩衝區是空的,生產者必須等待,如果緩衝區已滿, 但是從processe s, 如果緩衝區已滿,則第二個while循環的條件將爲真,因此該進程將進入無限循環並且不會出現,那麼該解決方案將如何工作。 有人請解釋一下,如果你可以請一個實際的例子,那就太棒了!

+0

發佈'in'和'out'聲明。 – chux

回答

0

生產者可以調用yield()給調度器提示它正在等待另一個線程。否則代碼必須依賴搶佔或多核架構。