|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
[C] - IPC: code di messaggi
Stavo affrontando un esercizio sulle code di messaggi .
Un demone Cuoco resta in ascolto su una coda di messaggi di eventuali richieste inviate sulla stessa coda da un Cliente (+ clienti anche contemporaneamente). Il cuoco riceve la richiesta si forca per creare un Cuoco Figlio che prepara il piatto e lo mette sulla coda di messaggi, e solo il Cliente che aveva effettuato quella richiesta deve ritirarlo.. Poi il cuoco Padre ritorna immediatamente in attesa di altre richieste. Avevo inizialmente pensato di mettere il cuoco padre in ascolto di tutti i messaggi presenti sulla coda (type =0) e di fare inviare al cliente "prepara" un messaggio sulla coda settando il type col proprio pid, in maniera che solo lui potese riceverlo. Però mi sono accorto che questa soluzione non funziona, perchè essendo il cuoco padre in ascolto di tutti i messaggi, potrebbe intercettare prima del Cliente il messaggio messo sulla coda dal Cuoco Figlio che ha preparato il piatto...e si avrebbe, oltre alla morte per fame del Cliente, anche un loop fra Cuoco Padre e Cuoco Figlio... Avevo pensato allora di mettere il Cuoco Padre in ascolto di un determinato tipo di messaggio (type = MIO_TIPO) e fare si che il Cliente mettesse sulla coda un messaggio di questo specifico tipo. In aggiunta il Cliente aggiunge in fondo al messaggio il proprio pid. Sarà poi compito del Cuoco ricavare dal messaggio il piatto e il pid e generare un Cuoco figlio che metta sulla coda un messaggio con type=pid così che solo il Cliente con quel pid possa riceverlo. Voi cosa ne dite? C'era una soluzione + intelligente? Il codice C è scritto decentemente? Allego i listati di cuoco e del cliente. Ultima modifica di cn73 : 08-04-2004 alle 08:22. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sinceramente non ho esperienza con questo genere di IPC sotto unix/linux...comunque mi sembra scritto tutto bene...e molto leggibile... Logicamente mi torna tutto...anche io avrei usato una soluzione del genere...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:55.