JL
2005-03-29 19:43:38 UTC
Hola colegas informáticos:
He desarrollado una aplicación multihilos que corre en un Red Hat Advanced
Server 2.1. Lo que hace es muy sencillo: el hilo principal está escuchando
un socket y al recibir datos en el mismo crea un hilo que atienda la
transacción. El problema es que llega un momento en que ya no puede seguir
creando hilos, por más que nunca tuve más de 5 hilos concurrentes.
En anteriores consultas me sugirieron que quizá no he estado liberando algún
recurso, así que me puse a buscar un poquito por Google si alguien tuvo
algún problema parecido y encontré el siguiente código:
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 255 /* Esta linea decía 5 pero la modifiqué yo para la
prueba que quería hacer */
void *PrintHello(void *threadid)
{
printf("\n%d: Hello World!\n", threadid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc, t;
for(t=0;t<NUM_THREADS;t++){
printf("Creating thread %d\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Al ejecutar este programa, obtengo el mismo resultado que con mi aplicativo
al llegar al hilo 255:
Creating thread 255
ERROR; return code from pthread_create() is 11
Es el mismo código de error de mi aplicación y al igual que en ella en este
programa tampoco son concurrentes los hilos: a medida que se van creando los
siguientes hilos los primeros ya han terminado su ejecución.
Alguno tiene idea de qué puede estar pasando ?.
Desde ya, muy agradecido
JL
He desarrollado una aplicación multihilos que corre en un Red Hat Advanced
Server 2.1. Lo que hace es muy sencillo: el hilo principal está escuchando
un socket y al recibir datos en el mismo crea un hilo que atienda la
transacción. El problema es que llega un momento en que ya no puede seguir
creando hilos, por más que nunca tuve más de 5 hilos concurrentes.
En anteriores consultas me sugirieron que quizá no he estado liberando algún
recurso, así que me puse a buscar un poquito por Google si alguien tuvo
algún problema parecido y encontré el siguiente código:
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 255 /* Esta linea decía 5 pero la modifiqué yo para la
prueba que quería hacer */
void *PrintHello(void *threadid)
{
printf("\n%d: Hello World!\n", threadid);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc, t;
for(t=0;t<NUM_THREADS;t++){
printf("Creating thread %d\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Al ejecutar este programa, obtengo el mismo resultado que con mi aplicativo
al llegar al hilo 255:
Creating thread 255
ERROR; return code from pthread_create() is 11
Es el mismo código de error de mi aplicación y al igual que en ella en este
programa tampoco son concurrentes los hilos: a medida que se van creando los
siguientes hilos los primeros ya han terminado su ejecución.
Alguno tiene idea de qué puede estar pasando ?.
Desde ya, muy agradecido
JL