PDA

View Full Version : [C - lpthread] Uccidere e ricreare thread


Rsk
23-01-2011, 13:14
Ragazzi.. ho un programma strutturato nel modo seguente.
Il main crea vari thread


do{

// inizializzo le strutture dati da passare ai thread
for(i=0; i< N; i++)
{
producer[i].x = i ;
}
//creazione dei thread
for(i=0; i<N; i++)
{
pthread_create(&elencoId[i], NULL, &producer, &producer[i]);
}

//creazione thread producer2
pthread_create(&elencoId[4], NULL, &producer2, &producer2);

//avvio controllo
check();

//attendo che i thread finiscano
for(i=0; i<N+1; i++) pthread_join(elencoId[i], NULL);

}
while(condition);


Dove i producer si occupano di inviare a check dei dati e check scrive su schermo.
Check legge i dati dalla memoria condivisa in cui scrivono i producer.

Ora.. non so come ritornare al main quando i thread finiscono il loro compito e riavviare i thread.

Potete aiutarmi?

maulattu
23-01-2011, 20:55
così a naso:
pthread_create(&elencoId[4], NULL, &producer2, &producer2);


sicuro di ciò?
crei un thread che esegue il metodo "producer2" e gli pass come argomento il puntatore della funzione stessa...:confused:

EDIT
altra cosa:
elencoId[4]
ti conviene fare
elencoId[i]
visto che all'ultimo giro del for precedente, i sarà uguale a N.
Mi raccomando, verifica che elencoId[.] sia di dimensione opportuna...

Rsk
23-01-2011, 21:20
così a naso:
pthread_create(&elencoId[4], NULL, &producer2, &producer2);


sicuro di ciò?
crei un thread che esegue il metodo "producer2" e gli pass come argomento il puntatore della funzione stessa...:confused:

EDIT
altra cosa:
elencoId[4]
ti conviene fare
elencoId[i]
visto che all'ultimo giro del for precedente, i sarà uguale a N.
Mi raccomando, verifica che elencoId[.] sia di dimensione opportuna...

In realtà il codice non è così.. ma la struttura si.. creo n producer1 e un producer 2.. e avvio la funzione check

il problema è che, una volta creati i thread, non so come riportare il controllo al main una volta che tutti i thread hanno finito il loro compito.. e da li ricrearli