[C] Dubbio su programma con thread

daniela871
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 :D

//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 :)[/mod]

Risposte
daniela871
ok perdonami non ho mai scritto un codice qui e in generale su un forum non immaginavo si facesse cosi!ciao

provola-votailprof
"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 :D

//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 ;)

daniela871
grazie 1000 sei stato chiarissimo!!! :D

provola-votailprof
figurati :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.