Pthreads - prilis mnoho threadu?? (Delsi)
Michal Krause
mike na navrcholu.cz
Pátek Duben 30 13:25:25 CEST 1999
Dne 30. 4. 1999 Dobes Jiri napsal:
> Vytvoril jsem program pro vypocty, ktery pouziva pthready.
> Program bezi chvili v pohode, ale po nejky dobe dalsi thready
> uz nejdou vytvorit. Pritom jsem stare (doufam) zrusil.
Zkusil jsem to a normalne mi to funguje. Je fakt, ze neco jsem upravoval,
ale nic podstatneho:
> #include <pthread.h>
> #include <unistd.h>
> #include <stdio.h>
>
> void * process(void *a) /* tohle je vypoctova cast */
> { int i;
> printf("Thread %d: start\n", (int *)a);
^ tady chybi jedna hvezdicka
> sleep(1); /* co jinyho by to mohlo delat? (a nezavisi to na tom) */
sleep() asi nepujde, protoze se dela pres signal a tudiz muze byt jenom
jeden najednou.
> printf("Thread %d: end\n", (int *)a);
^ opet chybi hvezdicka
> return NULL;}
>
> int main(){
> int i,j,retcode;
> pthread_t a;
> void *retval;
>
> for(j=1;j<=1000;j++)
> {for(i=1;i<=100;i++)
> { retcode = pthread_create(&a, NULL, process, (void *) i);
tady chybi & ^
> if (retcode != 0) printf("create a failed %d (i=%d, j=%d)\n",
> retcode,i,j);}
>
> retcode = pthread_join(a, &retval);
> if (retcode != 0) printf("join a failed %d\n", retcode);
> printf("Pthreads joined! (j=%d)\n",j);
> }
> return 0;}
>
> Zkonci to:
> Thread 32: start
> create a failed 11 (i=34, j=11)
Ovsemi pres uvedene chyby by to melo fungovat (nebo spis padat na sigsegv,
ale nemelo by to koncit s chybou na pthread_create).
> Proc nejdou dalsi thready vytvorit? Po skonceni funkce by
> se mel thread zlikvidovat. Na `ps` se zobrazi vzdy priblizne
> odpovidajici pocet threadu.
To jest kolik? Pripadne se mrknete jaky je limit na maximalni pocet threadu
(PTHREAD_THREADS_MAX).
Poznamka: doporucuji kompilovat s -Wall, usetrite si tim hledani ruznych
hloupych chyb, jako jsou prave ty chybejici hvezdicky nebo ampersandy.
S pozdravem
Michal Krause /\
ICQ: 7665279 Informace (nejenom) ze sveta Linuxu /\/ \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz
There are three kinds of lies: lies, damn lies, and benchmarks.
Jeremy Allison
Další informace o konferenci Linux