Critical section: ci sono controindicazioni ?

Ho di recente sviluppato un paio di applicazioni dove eseguivo svariati threads in contemporanea.

Per usare le classi che avevo precedentemente creato per l’ uso sul thread principale senza criticalsection ho dovuto creare un’ oggetto criticalsection da usare in tutti i metodi della classe e creare delle funzioni per accedere alle propriet condivise dell’ oggetto.

Finora non ho avuto alcun problema e mi sembra troppo bello per essere vero.

Prima di convertire le mie vecchie classi dalla versione “monothread” a “multithreads” mi sono chiesto se ci fossero delle controindicazioni.

Ce ne sono ?

Ogni suggerimento gradito !!!

No. Solo l’accortezza di gestirle correttamente per evitare blocchi reciproci…

Il problema dei blocchi reciproci non era mica una prerogativa dell’ oggetto semaphore ?
Mi potresti fare un esempio ?

La differenza tra semaphore e critical section la dimensione della risorsa da proteggere.
in pratica la critical section un semaphore con una risorsa.
Il semaforo ti permette di entrare fintanto che ci sono risorse a disposizione, per il resto il meccanismo lo stesso (essendo una la risorsa della critical section)

Il problema a cui devi prestare attenzione tanto banale (quindi facile da evitare) quando subdolo (essendo thread pu sfuggirti)
Diciamo che hai una classe thread T che nella sua esecuzione deve operare su una propriet P protetta dalla critical section.
In realt hai un codice che protegge la propriet del tipo
Enter critical
valore=propriet
leave critical

ma se nella lettura della propriet attivi un altro thread che poi nella sua esecuzione deve accedere alla stessa propriet P questo si blocca perch attiva la critical section ma ancora non ne sei uscito. Ma per uscirne devi accedere alla propriet. Risultato -> sei bloccato (deadlock)

Ripeto la cosa banale e l’esempio stupido (anche per evidenziarne la banalit) per cui con giusto un po’ di attenzione non c’ problema.

Buono a sapersi !!

Ora controller che i metodi che creo nella classe non abbiano delle chiamate recursive alle funzioni.

Grazie Antonio!