Come documentare applicazioni multithread

4

Lavoro come tecnico di supporto, avendo accesso al codice sorgente, e mi piacerebbe usare questa opportunità per documentare il codice sorgente, ma inciampo su una prima domanda: come posso iniziare?

Per le applicazioni a thread singolo, questo è semplice: l'utilizzo di una struttura ad albero (la funzione main() chiama alcune funzioni secondarie, chiamando le funzioni subsubili, ...) può essere eseguita in modo abbastanza semplice usando diagrammi UML standard.

Per le applicazioni multi-thread, questo diventa più difficile: potrei creare una struttura ad albero per i thread e una struttura ad albero per le chiamate di funzione, ma temo che il collegamento tra entrambi gli alberi possa creare un documento molto disordinato (mentre l'intera idea di documentazione è di chiarire).

Esiste un modo standard per documentare il codice sorgente per le applicazioni con multithread?

Ho dato un'occhiata a UML Diagrams of Multi-Threaded Applications ma non mi piacciono i diagrammi di sequenza per l'elaborazione di sottofunzioni, chiamate sottofunzioni, ...

    
posta Dominique 31.10.2018 - 11:41
fonte

1 risposta

4

Suggerisco di utilizzare il diagramma di attività UML per mostrare l'immagine grande della logica del multithreading, identificando i blocchi predefiniti (attività) che possono verificarsi indipendentemente in ogni thread, nonché le attività di sincronizzazione.

Nei diagrammi di attività:

  • unisce e consentono di rappresentare la sincronizzazione elementare tra i thread.
  • Gli swimmlane possono essere utilizzati per evidenziare thread separati nella visualizzazione.
  • All'interno di ogni thread è possibile mostrare la sequenza, senza fare supposizioni sull'ordinamento relativo su due thread.
  • Puoi anche usare un joins e un fork combinati per rappresentare possibilità di sincronizzazione come mutex o accessi atomici, che consentono di creare alcuni vincoli sull'ordinamento delle operazioni attraverso i thread.

Puoi quindi documentare le diverse attività in modo tre volte come fai tu. Inoltre è possibile commentare le attività di sincronizzazione nel codice e fare riferimento all'elemento di controllo nel diagramma.

In effetti, potresti anche mostrare la concorrenza in un frammenti combinati con una par operatore in un diagramma di sequenza. Ma non lo consiglierei qui: questo non aiuterà a cogliere il multithreading molto meglio e non offre alcun mezzo per mostrare la sincronizzazione tra attività concorrenti. Questi diagrammi sono più utili per alcuni dettagli sullo scambio tra oggetti che si verificano in una situazione multithreading rispetto alla comprensione della logica di multithreading in sé.

Letture aggiuntive:

risposta data 31.10.2018 - 13:01
fonte

Leggi altre domande sui tag