Oppure

Loading
Applicazioni Multi-threaded



A volte capita di dover affrontare problemi che trovano soluzione solo con operazioni svolte in parallelo; purtroppo la gestione di 2 processi pesa parecchio al sistema, quindi sono stati creati i thread, definibili come "processi leggeri"; ogni processo pu avere pi thread, i quali condividono lo stesso spazio di indirizzamento.

La libreria SDL ci mette a disposizione funzioni per creare thread e per poterli gestire. Prima di vedere quali sono queste funzioni necessario sapere a cosa necessario prestare attenzione per evitare effetti indesiderati:

Prima di tutto pensa a tutte le possibili soluzioni alternative all'utilizzo di un nuovo thread;

Se non c' altro modo, o se questo il pi efficace, bene evitare l'utilizzo di variabili globali su thread differenti;

Non terminare i threads, utilizza invece un flag e fai in modo che si chiuda autonomamente; questo sia per evitare errori di esecuzione che il possibile memory-leak;

E' preferibile non fare chiamate SDL Video/Event su pi threads.



SDL_Thread *SDL_CreateThread(int (*fn)(void *), void *data);

Questa funzione permette la creazione di un nuovo thread, avviando la funzione fn con parametri data.

    void SDL_WaitThread(SDL_Thread *thread, int *status);

Aspetta che un thread finisca; status il valore restituito dalla funzione main del thread terminato.

    void SDL_KillThread(SDL_Thread *thread);

Termina un determinato thread.



SDL permette anche la risoluzione del problema delle variabili condivise tramite mutex, ovvero il procedimento di sincronizzazione che impedisce l'accesso contemporaneo di pi threads alla stessa risorsa, evitando cos errori parecchio fastidiosi. La conoscenza del loro utilizzo v oltre lo scopo di questa guida.

Un esempio di operazione da svolgere in multi-threading la gestione della comunicazione di rete; in questo caso, a meno che non si intenda bloccare il software in attesa di un determinato pacchetto, o fino alla scadenza di un timeout, risulta fondamentale l'utilizzo di un secondo thread che gestisca in maniera autonoma la connessione.

A cura di: Oligoatria