PDA

View Full Version : [C] Multithreading: Ufficio postale


-hide-
26-06-2010, 17:55
In un ufficio postale sono presenti tre sportelli, 1, 2 e 3, ognuno dei quali si occupa di una differente operazione.
Le persone che arrivano nell'ufficio, per svolgere un'operazione da uno sportello, prendono un biglietto col numero di turno da un distributore unico che mantiene le sequenze distinte per le tre code.
Implementare un'applicazione multithreading in C per il sistema di gestione delle code automatico con i sequenti requisiti:
1. ogni utente prende il numero relativo al servizio richiesto premendo il tasto corrispondente;
2. quanso si libera il posto da uno sportello viene visualizzato il numero di sequenza successivo per lo sportello libero sul display del corrispondente sportello (quando l'operatore batte il tasto "n" del proprio terminale);
3. quando il sistema viene spento lo stato del distributore e degli sportelli viene salvato in un file in modo che al suo riavvio possa riprendere.

Questo è un compito d'esame di Sistemi Operativi, materia che a breve devo affrontare.
Il seguente programma l'ho implementato tranne che per il terzo punto poiché non mi è chiaro un concetto. Intanto dove creo la scelta di memorizzazione? Nel distributore non è coerente perché sarebbero i clienti a sceglierlo, allo sportello non è coerente perché altrimenti dovrei gestire la chiusura di un solo sportello, potrei creare un nuovo thread "amministratore" che gestisce questa volonta in modo casuale oppure potrei mettere una scelta nel main e santa pazienza. In ogni caso, io posso salvare delle variabili su un file ma lo stato di un semaforo come lo salvo?!

Se è necessario anche il mio codice per comprendere dite pure che cercherò di postarlo.

-hide-
28-06-2010, 08:31
up1

dojolab
28-06-2010, 08:33
up1

Potresti serializzare tutto in un file per memorizzare lo stato degli sportelli.
L'idea del thread di amministrazione la condivido.

Aspettiamo però pareri da persone più esperte!

nalsk
04-07-2010, 15:26
Come hai detto tu basta creare un thread per la serializzazione, che controlla solo se sono avvenuti cambiamenti nella memoria condivisa, e se si, serializza. Anche io avrei fatto così :)
EDIT: ovviamente all'avvio la memoria condivisa devi ripristinarla in base a ciò che hai serializzato

-hide-
04-07-2010, 15:53
RISOLTO

Grazie per i consigli :)