Leggevo sull'implementazione del problema produttore-consumatore con un produttore e un consumatore. Osservando questo paragrafo vedo l'implementazione in cui l'accesso alle risorse condivise non è sincronizzato e produttore e il consumatore può modificare la risorsa condivisa che porta al suo stato incoerente.
semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space
procedure producer() {
while (true) {
item = produceItem();
down(emptyCount);
putItemIntoBuffer(item);
up(fillCount);
}
}
procedure consumer() {
while (true) {
down(fillCount);
item = removeItemFromBuffer();
up(emptyCount);
consumeItem(item);
}
}
Ma la seguente descrizione dice:
The solution above works fine when there is only one producer and consumer.
Ma quando emptyCount
e fillCount
sono diciamo 5 (la dimensione del buffer è 10), produttore e consumatore avranno simultaneamente accesso alla risorsa condivisa e modificheranno la raccolta sottostante, quindi per me la soluzione sopra descritta non funziona bene anche se c'è un solo produttore e consumatore. È l'ipotesi giusta e una descrizione citata è sbagliata?