Premetto che sono un po' a digiuno sui threads... (nel senso che utilizzo di più i socket) comunque da quello che mi ricordo c'è una parte interessante riguardo la semaforizzazione dell'area sharata usando mutex.
Ho dato un'occhiata al tuo src, senza compilarlo (non ho lib2.h). In linea di massima il giro mi sembra corretto a parte un errore: modificaNome dovrebbe allocare l'intera struttura e non solo in ptr. Io farei subito una copia dell'area di memoria, in maniera da evitare possibili variazioni sulla zona sharata (andrebbe lockata), poi visualizzo e modifico il nome ed infine rilascio il nuovo ptr.
void* modificaNome(void* pt)
{
v* arg=(struct v *) malloc (sizeof(v));
memcpy (arg,pt,sizeof(v));
cout << "My tID: " << pthread_self() << " My ID: " << arg->nThreah << endl;
cout << "Nome da modificare: " << arg->nome << " posizione da modificare: " << arg->posModifica << endl<<endl;
arg->nome[arg->posModifica]='X';
return ((void *) arg);
}
Poi nel main, il giro della create mi sembra corretto... la dicharazione di risPt è giusta ed anche la pthread_join.
Per la visualizzazione usa 'risPt->nome' (già puntatore) ed infine aggiungi free (risPt);
v *risPt;
for(i=0;i<10;i++)
{
nok=pthread_join(tID[i],(void **) &risPt);
if(nok) esci("Errore terminazione thread");
cout << "sono il thread ID" << risPt->nome << endl; //Questa RIGA DA ERRORE!!!
free (risPt);
}
Saluti,
Max