[C] Dubbio su programma con thread
salve a tutti avrei qualche dubbio su un semplice programma scritto in c che usa i thread; vi scrivo qui sotto il codice e vi pongo la mia domanda nella speranza che qualcuno mi sappi dare una risp
spero che qualcuno possa aiutarmi,grazie ciao!
[mod="Luc@s"]
La prossima volta usa i tag [code] e un titolo più esplicativo
[/mod]

//questo programma fa stamapre al thread a 10 volte 'a' e al thread b 10 volte 'b' #include<stdio.h> #include<pthread.h> void *stamp_a(void *arg){ //che ci sta a fare *arg se nel campo corrispondente sotto ho passato NULL???potrei farne a meno?? int i; for(i=0;i<10;i++) printf(" \t%d\tA\n",i); } void *stamp_b(void *arg){ //stessa domanda fatta sopra int i; printf("\n"); for(i=0;i<10;i++) printf("\t%d\tb\n",i); } int main(int argc,char *argv[]) { //sapete spiegarmi cosa cambia se metto questi argomenti nel main o no?io ho provato a compilare senza e praticamente nn cambia nulla pthread_t a,b; pthread_create(&a,NULL,stamp_a,NULL); //se in questa funzione passo NULL come parametro attuale perchè come parametro formale viene messo *arg???ho provato senza e //funziona ma siccome questo mio dubbio ricorre in parecchi esercizi anche in quelli più difficili vorrei capire come funziona pthread_create(&b,NULL,stamp_b,NULL); pthread_join(a,NULL); //sospende il thread main finchè a non termina?? pthread_join(b,NULL); printf("TUTTO FINITO\n"); }
spero che qualcuno possa aiutarmi,grazie ciao!
[mod="Luc@s"]
La prossima volta usa i tag [code] e un titolo più esplicativo

Risposte
ok perdonami non ho mai scritto un codice qui e in generale su un forum non immaginavo si facesse cosi!ciao
"daniela87":
salve a tutti avrei qualche dubbio su un semplice programma scritto in c che usa i thread; vi scrivo qui sotto il codice e vi pongo la mia domanda nella speranza che qualcuno mi sappi dare una risp![]()
//questo programma fa stamapre al thread a 10 volte 'a' e al thread b 10 volte 'b' #include<stdio.h> #include<pthread.h> void *stamp_a(void *arg){ //che ci sta a fare *arg se nel campo corrispondente sotto ho passato NULL???potrei farne a meno?? //qui puoi tranquillamente farne a meno int i; for(i=0;i<10;i++) printf(" \t%d\tA\n",i); } void *stamp_b(void *arg){ //stessa domanda fatta sopra //stessa risposta data prima int i; printf("\n"); for(i=0;i<10;i++) printf("\t%d\tb\n",i); } int main(int argc,char *argv[]) { //sapete spiegarmi cosa cambia se metto questi argomenti nel main o no?io ho provato a compilare senza e praticamente nn cambia nulla /* sì, ti spiego subito. In dos o in un qualsiasi ambiente con shell puoi avviare un programma con dei parametri tipo: nomeprogramma.exe -attributo1 -attributo2 argc è un intero, come leggi chiaramente, ed indica il numero di stringhe passate alla shell. argv invece è un vettore di stringhe, e contiene al suo interno le varie stringhe passate. Per cui, seguendo sempre l'esempio appena fatto avrai: argc = 3 argv[0] = "nomeprogramma.exe" argv[1] = "-attributo1" argv[2] = "-attributo2" */ pthread_t a,b; pthread_create(&a,NULL,stamp_a,NULL); //se in questa funzione passo NULL come parametro attuale perchè come parametro formale viene messo *arg???ho provato senza e //funziona ma siccome questo mio dubbio ricorre in parecchi esercizi anche in quelli più difficili vorrei capire come funziona /* Il discorso è simile a quello fatto pocanzi per il main, se leggi il reference di pthread_create scoprirai che il secondo parametro è riservato a degli attributi (che non credo sia utile spiegare qui e adesso). Mettendo il primo NULL stai dicendo alla funzione di creare il thread con gli attributi di default. Il secondo NULL invece è riservato ai parametri della funzione stamp_a, mettendo NULL stai dicendo di non passare niente alla funzione stamp_a */ pthread_create(&b,NULL,stamp_b,NULL); pthread_join(a,NULL); //sospende il thread main finchè a non termina?? //esattevolmente %D pthread_join(b,NULL); printf("TUTTO FINITO\n"); }
spero che qualcuno possa aiutarmi,grazie ciao!
Leggi in mezzo al quote

grazie 1000 sei stato chiarissimo!!!

figurati
