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