Un produttore e un consumatore rispetto allo stato di risorsa condivisa incoerente

1

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?

    
posta ctomek 28.05.2016 - 12:05
fonte

0 risposte