PDA

View Full Version : [UNIX] Fifo server


beppegrillo
19-05-2006, 12:53
Dovrei implementare un programma di tipo clien/server utilizzando esclusivamente le fifo. L'implementazione però non deve essere la classica che crea una fifo per ogni client attraverso quale ricevono la risposta, ma dovrei usare due sole fifo una in lettura l'altra scrittura e utilizzare dei meccanismo di sincronizzazione (no mutex,lock ecc) per gestire la cosa.
L'idea era quella di inviare un msg al server con il pid del client e mettere in attesa il client, il server manda la risposta sulla fifo e risveglia il client.
Tale apporoccio però non funziona sempre, si creano delle race conditions.
Suggerimenti?

ilsensine
19-05-2006, 16:49
Più client (lettori) su un unico canale? Quando il server manda un messaggio di risposta, verrà letto solo da un client a caso.

beppegrillo
19-05-2006, 16:52
Più client (lettori) su un unico canale? Quando il server manda un messaggio di risposta, verrà letto solo da un client a caso.
si esatto, ci sono + lettori su una sola fifo
Già quello è il problema, quindi ho cercato di mettere una sorta di meccanismo di sincronizzazione, operando in questo modo.
Il client fa la richiesta sulla fifo di lettura del server, tale richiesta sarà del tipo
pid_cliente_request, in seguito il cliente si mette in pause(), il server leggerà la richiesta dalla fifo, risveglia il client e gli manda sulla fifo di scrittura la risposta.
Però non è tutto così semplice, se ho + di due client, la cosa inizia a diventare problematica :cry:

ilsensine
19-05-2006, 17:19
Più che problematica direi impossibile. Per evitare la race dovresti usare tecniche ben più complicate della semplice apertura di un canale dedicato per ogni client.

beppegrillo
19-05-2006, 17:58
Più che problematica direi impossibile. Per evitare la race dovresti usare tecniche ben più complicate della semplice apertura di un canale dedicato per ogni client.
Già lo avevo immaginato, a stò punto sono curioso di vedere la soluzione del docente che aveva ipotizzato una cosa del genere.
Ti faccio sapere in caso riesca a tirare fuori la soluzione :D