L a progettazione comincia con la scelta di un modello di programmazione della applicazione multi-threading da queste 2 cose:
- In che modo il disegno renderà riconoscibili gli oggetti che vengono eseguiti su/attraversati da più thread e avranno bisogno di una gestione della concorrenza?
Una nota tecnica utile, la gestione della concorrenza serve quando thread diversi scrivono sullo stesso field della classe oppure uno ci scrive e un altro ci legge. Queste sono chiamate le condizioni di Bernstein [1]
- Quale politica di gestione dello stallo verrà seguita e come il disegno la renderà evidente e aiuterà ad applicarla in modo consistente in tutta la applicazione ?
La condizione di stallo è quando un thread per proseguire la sua elaborazione ha bisogno di allocare (mettere un lock) a un field di classe che però già allocato a sua volta da un secondo thread ... che è fermo ad aspettare un'altra risorsa allocata dal primo. [2]
Si sceglierà una tecnica di prevenzione del deadlock (ad esempio allocando contemporaneamente tutti i lock necessari a una elaborazione oppure acquisendo lock sempre seguendo uno stesso ordine) o una tecnica di riconoscimento del deadlock in corso e limpiego di provvedimenti per uscirne (tipo il rollback di uno dei thread in deadlock).
Oppure nel caoso specifico sarà possibile adottare una strutturazione degli oggetti tali da evitare del tutto necessità di wait/lock e quindi lo stesso deadlock [3]
[1] A.J. Bernstein, "Program Analysis for Parallel Processing" IEEE Trans. on Electronic Computers, EC-15, October 1966
[2] Richard C. Holt: Some Deadlock Properties of Computer Systems. ACM Comput. Surv. Vol.4 Num.3, Sett 1972
[3] Maurice Herlihy, "Wait-free synchronization" ACM TOPLAS Vol.13 Num.1, Genn 1991
Tags : Progettazione Software |