PDA

View Full Version : [C] Organizzare un programma Multithread


Mistre
15-04-2006, 09:07
Ciao a tutti!!!
Devo realizzare un programma Multithread ed il problema e' che io non ho mai programmato con questi.
Siccome non so a priori il numero di thread che potranno servirmi ( devo fare una chat ) non riesco a capire come poterli memozizzare. Mi spiego meglio, io ho la necessita di terminare un thread X quando il determinato utente si disconnette, quindi io avevo pensato ad una lista che contiene i thread_id di tutti gli utenti e cancellare l'elemento relativo all'utente che si disconnette, pensate che sia una buona idea?

Grazie

vegeta83ssj
15-04-2006, 09:12
Una semplice pthread_exit alla fine di ogni thread può bastare, unita ad una pthread_join all'interno del main!
Qui: http://yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html trovi un buon tutorial sui pthread e in fondo alla pagina ci sono una serie di link molto utili!

Ciauz

Mistre
15-04-2006, 09:20
All'interno del ciclo while(true) nel caso in cui l'utente voglia uscire ci metto una pthread_exit ?

Mistre
15-04-2006, 09:24
Ah, e se invece all'interno del ciclo while(true) che gestisce il thread utente mettissi un break quando questo vuole uscire, e' peggio rispetto ad una exit ?

BountyKiller
15-04-2006, 09:27
il thread ha una funzione principale che è in fin dei conti è il thread stesso..... quando questa funzione ritorna il thread muore quindi sono quasi certo che non sia necessario chiamare una funzione apposta che lo uccide....piuttosto devi liberare gli handle degli oggetti kernel che ti serviranno per la sincronizzazione.
ciao!

Mistre
15-04-2006, 09:32
ah, quindi libero la memoria che mi serve quando questo deve terminare e faccio una return ?

Altra domanda, per quanto riguarda i mutex non riesco ad organizzarmi, cioe', e' meglio se metto uno static pthread_mutex_t all'interni del thread prima del ciclo while, oppure metto un muttex globale all'esterno di tutto e lo inizializzo con PTHREAD_MUTEX_INITIALIZER?

cioe', la differenza dove sta?

vegeta83ssj
15-04-2006, 10:29
ah, quindi libero la memoria che mi serve quando questo deve terminare e faccio una return ?

Altra domanda, per quanto riguarda i mutex non riesco ad organizzarmi, cioe', e' meglio se metto uno static pthread_mutex_t all'interni del thread prima del ciclo while, oppure metto un muttex globale all'esterno di tutto e lo inizializzo con PTHREAD_MUTEX_INITIALIZER?

cioe', la differenza dove sta?

Sul sito del corso di sistemi operativi che ho appena fatto (e passato) troverai tutte le informazioni che ti servono. In particolare guardati le parti sulla mutua esclusione e sui semafori nonchè ovviamente la parte sui thread in linux.
Ecco il link: http://lia.deis.unibo.it/Courses/SistOpLS0506/Materiale.html

Ciauz