|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
[c] server multithread: far comunicare i vari thread
Salve a tutti. Sto' facendo un server di chat, multithread, dove ogni thread gestisce la comunicazione con un diverso client. Il problema nasce quando un utente vuole mandare un messaggio ad un altro utente: come posso far comunicare il thread associato al primo con il thread associato al secondo??? L'unica cosa che mi e' venuta in mente e' fare una struttura dati condivisa da tutti dove scrivere i messaggi ricevuti dall'utente e scrivere anche il nome dell'utente al quale questo messaggio e' destinato. I vari thread eseguono un ciclo che ad ogni iterazione, oltre alle altre cose che dovra' fare, controlla se ci sono messaggi per lui e in quel caso lo "preleva" e lo spedisce al client.
Il fatto e' che mi sembra una mezza stupidaggine... Qualcuno mi sa' dare un idea migliore? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 1945
|
Se sei con linux potresti utilizzare le code di messaggi! E' una cifra che non programmo in C comunque dai uno sguardo alla documentazione e non dovresti avere problemi a trovare degli esempi in rete
http://linux.die.net/man/2/msgget con questo crei una coda di messaggi http://linux.die.net/man/2/msgctl qui controlli la coda http://linux.die.net/man/2/msgsnd invio e ricezione dei messaggi |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
Siccome quello che sto' facendo mi serve per il progetto di un esame, ho gia' una libreria (scritta da me) che realizza liste di per tipi generici. La mia idea era usare queste liste. Il punto e' che nn sono sicuro che il modo per realizzarla sia quello che ho scritto nel primo messaggio.
Un'altra soluzione potrebbe essere fare una lista per ogni thread, dove gli altri thread possono solo inserire nuovi messaggi (quindi nuovi elementi della lista) e il thread "proprietario" di quella lista manda un messaggio al client corrispettivo per ogni elemento... |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2095
|
Ehh la comunicazione tra thread non è mia banale... credo che la via migliore sia sempre usa un "file" o assimilabile (socket, coda, pipe..) si può fare anche scambiandosi variabili o cose del genere, ma se 2 devono scrivere contemporaneamente... occhio!
Devi mettere mutex sparsi in giro per il codice |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
Ho creato una piccola libreria che crea una coda e fornisce le funzioni per mandare questi messaggi e leggerli. Ora sto' finendo di scrivere e testando un po', spero di nn avere troppi problemi. Per quanto riguarda la mutua esclusione dovrebbe essere sufficiente fare la lock prima della chiamata di ogni funzione di questa libreria. Grazie per l'aiuto.
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Quote:
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 |
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2009
Messaggi: 119
|
Non ho ben capito cosa intendi per esterne... Quello che sto' fancendo e' una chat client server con socket AF_UNIX (che gira in locale insomma) e devo attenermi allo standard posix. Il problema nasce dal fatto che ogni thread gestisce un client diverso e devo farli comunicare quando un client vuole mandare un messaggio ad un altro. Quindi la mutua esclusione non e' trascurabile.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:33.




















