Newsgroup: it.comp.os.linux.development
Titolo: Programmazione orientata agli eventi.

Salve.
Ho il seguente problema.
Nel mio programma ho vari "oggetti" implementati proprio con delle
classi C++.
Volendo che ogni oggetto fosse dotato di vita propria (volendo che, in
pratica, ognuno si facesse i fatti suoi) ho fatto in modo che ciascuno
di questi oggetti allochi un thread dedicato a sè. Il thread segue lo
stato dell'oggetto e ne provoca l'evoluzione attraverso chiamate ad
alcuni suoi metodi.
Ciascun oggetto, poi, ha degli handler di eventi ai quali, chi vuole,
dall'esterno si può aggangiare per ricevere la notifica delle
transizioni di stato.
Il problema è che in tutto questo nessuno mi assicura che i thread (che
sollevano gli eventi) non si scontrino all'esterno degli oggetti a cui
appartengono.
E neanche vorrei seminare di Mutex tutto il codice.
Qualcuno ha qualche consiglio da darmi?
Grazie,
Marcello.

di questi oggetti allochi un thread dedicato a sè. Il thread segue lo
Non ho idea di cosa tu stia facendo, ma sono quasi sicuro che tu stia
completamente sbagliando modello di programmazione.
Come regola generale, se hai bisogno di piu` di qualche thread stai
sbagliando qualcosa.
-- 
ciao, | [Per rispondere togli "toglimi" dal mio indirizzo.]
Marco | * The Internet is full. Go away.  -- Joel Furr *
      | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it

Qualcuno ha qualche consiglio da darmi?
puoi dire che programma devi scrivere?
cosi mi hai solo confuso molto.
ciao ciao

 cosi mi hai solo confuso molto.
si tratta di un estensione al protocollo RSVP per abilitarlo alla
gestione delle prenotazioni anticipate.
In particolare ora sto realizzando una sorta di piccolo database che
deve immagazzinare le prenotazioni. Queste hanno un istante di inizio ed
uno di fine. Quindi il database dovrebbe sollevare un evento (asincrono
con il resto del programma) che notifichi l'ingresso nello scope
temporale di una prenotazione. Per questo avevo pensato che a sollevare
l'evento sarebbe dovuto essere un thread. In questo modo però ho il
problema che è il thread ad eseguire la funzione/metodo agganciata
all'evento, potendo così collidere con il resto dell'applicazione (per
ora c'ho solo questo thread).
Ho pensato di risolvere il problema implementando una coda dei messaggi
che disaccoppi ciascuna entità dalle altre. Ci sto lavorando.
Salutoni,
Marcello.

che disaccoppi ciascuna entità dalle altre. Ci sto lavorando.
premesso che non so cos'è il protocollo RSVP,
a quanto ho capito hai la bisogno di essere certo
che i thread non creino situazioni di strutture
dati inconsistenti, dovute all'accesso asincrono e casuale
di più thread a strutture dati globali del programma.
credo che nel caso di dati complessi, come il DB stesso
ti convenga serializzare le richieste assicurandoti
che le scritture dei record siano atomiche (quindi code di messaggi o pipe
+ scrittura dei record con una singola msgsnd() o write()).
nel caso di variabili globali a cui più thread possono accedere
sia in lettura che in scrittura, sono d'obbligo i semafori.
In più devi esseree sicuro di non avere mai situazioni in cui
due o più processi dipendano mutuamente l'uno dall'altro,
perchè possono verificarsi situazioni di stallo.
quello che ti ho detto sono i principi di base della programmazione
concorrente, basta seguirli sempre per non avere i problemi da te descritti.
ciao.