|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
[UNIX] Fifo server
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?
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Più client (lettori) su un unico canale? Quando il server manda un messaggio di risposta, verrà letto solo da un client a caso.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
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
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 1455
|
Quote:
Ti faccio sapere in caso riesca a tirare fuori la soluzione
__________________
Ciao ~ZeRO sTrEsS~ |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:43.



















