PDA

View Full Version : [C++] Problema su sezioni critiche e semafori


sottovento
24-03-2006, 08:01
Ciao a tutti,
stavo esaminando un pezzo di codice che sembra dare problemi di prestazioni, e mi sono accorto che il problema sembra legato all'eccessivo uso di meccanismi di sincronizzazione (quali semafori, sezioni critiche, ...).

Il codice in questione realizza due thread, che si parlano attraverso una coda. L'accesso ai metodi della coda (un vettore con dimensione massima prefissata) e' regolato da un semaforo, controllato all'interno di ogni metodo di questa coda.
L'autore del codice ha messo ancora altri semafori e sezioni critiche anche alla chiamata dei vari metodi, scrivendo codice apparentemente sovrabbondante.
Questo sembra causare un calo di prestazioni, oltre che un accumulo inaccettabile di messaggi nella coda, durante i periodi di maggiore attivita'.

Prima di modificare questo codice, volevo documentarmi bene. Avete un'idea su come implementare, in maniera sicura, un meccanismo produttore-consumatore basato su di una coda? Come ottenere il massimo parallelismo possibile? Dove ottenere documentazione a riguardo?

Ringrazio chiunque per qualsiasi suggerimento, anche quello di cambiare mestiere :)

High Flying
Sottovento

mr_hyde
25-03-2006, 00:33
Le classiche ricerche in rete direi che fanno al caso tuo.
Ai tempi, a me erano statiutili alcuni dei link che trovi qui:

http://www.humanfactor.com/pthreads/pthreadlinks.html
http://www-128.ibm.com/developerworks/linux/library/l-posix1.html

(se cerchi comunque ne trovi a milioni)

Ciao,
Mr Hyde