Hi! I tried the following test program with various 2.4.x und 2.2.x kernels and noticed that it doesn't *seem* to be possible to create more than 1021 threads. I changed "ulimit -u" from within bash before running the thread test program, I modified a setting in the /proc filesystem:
/proc/sys/kernel/threads-max (but that limit is 12287 with a 2.4.21 kernel, so it should be high enough anyway), but all I got was: [...] Thread #1019: Thread started...thread done Thread #1020: Thread started...thread done Thread #1021: Thread started...thread done Thread #1022: *** Unable to create thread #1021 *** Why is the limit on the maximum # of threads so low? Here's the code (can be compiled with "gcc -o thread_test thread_test.c -lpthread"): ------------------------------------------------- #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h> void* thread_func( void* arg ) { (void) printf( "Thread started..." ); return NULL; } int main( int argc, char** argv ) { int i = 0; int retval = 0; unsigned int sleepsecs = argv[2] ? atoi( argv[2] ) : 3; long numthreads = 0L; pthread_t thread_id[ argv[1] ? atol( argv[1] ) : 10 ]; if ( argc < 2 ) { (void) fprintf( stderr, "Please specify # of threads to create!\n" ); exit( EXIT_FAILURE ); } numthreads = atol( argv[1] ); if ( numthreads <= 0 ) { (void) fprintf( stderr, "Please specify # of threads > 0\n" ); exit( EXIT_FAILURE ); } if ( ( retval = setvbuf( stdout, NULL, _IONBF, 0 ) ) != 0 ) { (void) fprintf( stderr, "Unable to switch stdout to unbuffered mode!\n" ); exit( EXIT_FAILURE ); } if ( ( retval = setvbuf( stderr, NULL, _IONBF, 0 ) ) != 0 ) { (void) fprintf( stderr, "Unable to switch stderr to unbuffered mode!\n" ); exit( EXIT_FAILURE ); } (void) printf( "Sleeping %d seconds before creating a new thread\n", sleepsecs ); for ( i = 0; i < numthreads; i++ ) { (void) printf( "Thread #%d: ", (i + 1) ); if ( ( retval = pthread_create( &thread_id[i], NULL, thread_func, NULL ) ) != 0 ) { (void) fprintf( stderr, "*** Unable to create thread #%d ***\n", i ); } (void) printf( "thread done\n" ); (void) sleep( sleepsecs ); } return( EXIT_SUCCESS ); } -------------------------------------------------------------- Any help will be greatly appreciated! Greetings, Holger -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]