2012-01-24 15 views
10
problemas

productor-consumidor tomado de Wikipedia:productor-consumidor 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) 
    } 
} 

Mi pregunta - ¿por qué el productor tiene up(fillCount) //the consumer may not finish before the producer después del bucle while. ¿Cuándo llegará el programa y por qué es necesario?

Respuesta

5

Creo que el código no tiene sentido de esta manera. El bucle nunca termina, por lo que nunca se puede llegar a la línea en cuestión.

El código no contenía originalmente esa línea, y era added by an anonymous editor in March 2009. I removed that line now.

En general, el código en Wikipedia a menudo es editado por muchas personas durante un largo período de tiempo, por lo que es bastante fácil introducir errores en él.