2012-01-24 17 views
10
problema

produttore-consumatore preso da Wikipedia:produttore-consumatore con 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) 
    } 
} 

La mia domanda - perché il produttore ha up(fillCount) //the consumer may not finish before the producer dopo il ciclo while. Quando arriverà il programma e perché è necessario?

risposta

5

Penso che il codice non abbia senso in questo modo. Il ciclo non finisce mai, quindi la linea in questione non può mai essere raggiunta.

Il codice non conteneva originariamente quella riga ed era added by an anonymous editor in March 2009. I removed that line now.

In generale, il codice su Wikipedia viene spesso modificato da molte persone per un lungo periodo di tempo, quindi è abbastanza facile introdurre bug in esso.