linux+c+pthread

Martin Kozusky kozusky na ics.muni.cz
Středa Srpen 22 11:31:28 CEST 2001


Ahoj,
nezkouseli jste si nekdo hrat pod linuxem s thready z knihovny phread?

Zkousim si udelat jednoduchy program, ktery vytvori mnoho threadu a kazdy
thread potom jenom vypise cislo.

Jenomze nastaly dva problemy:
1 - cim vic threadu, tim vic to zere pameti - to by ale nemelo ne? kdyz se
ten thread ukonci
2 - vytvori to max 255 threadu, coz by bylo vporadku, kdyby byly vsechny
aktivni ne? ale ja jenom vypisu cislo a hned ten thread ukoncim, takze je
mala sance ze jich pojede 255 zaroven.

Diky moc,
Martin

PS: Moc me neukamenujte, v tomto programovani jsem zacatecnik :-)

tady prikladam zdrojak
------------------------------

#include <stdio.h>
#include <pthread.h>

typedef struct {
   char *retezec;
   int cislo1,cislo2;
   int *pocit;
   } thread_param;

void *thread_function(void *param)
{
printf("nr: %d - %d\n",((thread_param *)param)->cislo1,((thread_param
*)param)->cislo2);
//printf("nr2: %d\n",*((pts *)param)->pocit);
free ( (thread_param *)param);
(*((thread_param *)param)->pocit)--;
pthread_exit(1);
}

int main(void)
{
pthread_t  *thr;
int pom;
int i,j;
pom=1;

for (j=1; j<=26; j++)
{

for (i=1;i<=10;i++)
{
 thread_param *parm;
 int vys=0;

 pom++;
 parm=malloc(sizeof(thread_param));
 parm->cislo1=i;
 parm->cislo2=j;
 parm->pocit=&pom;
 thr=malloc(sizeof(thr));
 vys=pthread_create(thr,NULL,thread_function,parm);
 if (vys!=0) pom--;
      //kdyz nastala chyba tak to zadny thread neodecte (nevytvoril se),
musim to udelat ja
 printf("vys: %d\n",vys);
 free(thr);
 }
sleep(1);  //chvilku pockam, pak vytvorim dalsich 10 threadu
}

while (pom>1)
{
sleep(1);
 //cekam dokud vsechy thready nezmensi promenou "pocit" v predavane
strukture
 //tj. cekam dokud vsechny thready neskonci
}
return 1;
}





Další informace o konferenci Linux