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