2012-01-24 18 views
10
problemowych

producent-konsument zaczerpnięte z Wikipedia:producent-konsument z sempahores

semaphore mutex = 1 
semaphore fillCount = 0 
semaphore emptyCount = BUFFER_SIZE 

procedure producer() { 
    while (true) { 
     item = produceItem() 
     down(emptyCount) 
      down(mutex) 
       putItemIntoBuffer(item) 
      up(mutex) 
     up(fillCount) 
    } 
    up(fillCount) //the consumer may not finish before the producer. 
} 

procedure consumer() { 
    while (true) { 
     down(fillCount) 
      down(mutex) 
       item = removeItemFromBuffer() 
      up(mutex) 
     up(emptyCount) 
     consumeItem(item) 
    } 
} 

Moje pytanie - dlaczego producent ma up(fillCount) //the consumer may not finish before the producer po pętli while. Kiedy program dotrze do celu i dlaczego jest potrzebny?

Odpowiedz

5

Myślę, że kod nie ma sensu w ten sposób. Pętla nigdy się nie kończy, więc ta linia nigdy nie zostanie osiągnięta.

Kod początkowo nie zawierał tej linii, a był to added by an anonymous editor in March 2009. I removed that line now.

Ogólnie rzecz biorąc, kod na Wikipedii jest często edytowany przez wiele osób przez długi okres czasu, więc łatwo jest wprowadzić w nim błędy.