Come posso testare un programma produttore-consumatore multithreaded C? [chiuso]

5

Come si può scrivere un test per un programma C multiprodotto produttore-consumatore?

So che GDB può essere usato per eseguire il debug dei thread, ma credo che GDB fermi anche il thread attualmente in fase di debug mentre altri thread continuano a funzionare.

Voglio testare il mutex lucking corretto / sbloccare e bloccare i miei thread. Mi sono guardato intorno ma non sono riuscito a trovare alcuna buona risorsa.

Ho dei test unitari per tutte le funzionalità non concorrenti, ma voglio assicurarmi che la concorrenza sia corretta. Come si possono ottenere i test per i programmi con multithreading?

    
posta LazerSharks 12.10.2015 - 21:30
fonte

1 risposta

6

L'unico modo che conosco per testare un software che utilizza la concomitanza del tipo di blocco è provarlo con prove di stress.

Puoi scrivere test unitari che coprono alcune o anche tutte le operazioni che implicano la concorrenza, ma non hai ancora testato il tuo software, perché i problemi con la concorrenza derivano da interazioni impreviste tra thread che dipendono molto dal timing, e quindi non deterministico.

Quindi, devi scrivere un test che esegue il tuo sistema per ore, sperando che se c'è un problema, si manifesterà.

Naturalmente, il tuo software potrebbe contenere un difetto che si manifesta solo una volta su un milione di operazioni di blocco, nel qual caso, da un punto di vista statistico, non hai praticamente nessuna possibilità di rilevarlo durante i test interni, quindi spedisci il tuo prodotto e migliaia e migliaia di utenti iniziano a utilizzarlo giorno dopo giorno, 24 ore su 24, e il difetto inizia a manifestarsi ogni tanto, il che è un incubo.

Ecco perché il settore si sta allontanando dalla concorrenza del tipo di blocco e utilizza invece altri approcci, come i sistemi share-nothing in cui i thread comunicano tra loro solo tramite code di messaggi, attraverso cui passano solo dati immutabili, quindi che l'unica posizione nell'intero sistema che implica il blocco è costituita da poche istruzioni in una sola classe, la classe della coda dei messaggi. Il grande vantaggio di questi sistemi è che sono testabili, mentre i sistemi concorrenti di tipo lock non sono realmente testabili.

Sono più simili a "stress test e pregare".

    
risposta data 12.10.2015 - 23:06
fonte

Leggi altre domande sui tag