pthread programming eats up resources (My or FreeBSD's fault?)

Andre Albsmeier mail at ma17.ata.myota.org
Tue Feb 18 18:09:41 UTC 2014


Well, as these are my first steps regarding thread programming,
it's probably my fault...

Why does this programme slowly grow and grow until it hits
resource limits?

----- snip pth1.c -----

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

void* mythread( void* arg )
{
  return NULL;
}

int main( int argc, const char* const argv[] )
{
  pthread_t pthr;
  int i;

  while( 1 ) {

    for( i=1000; i; i-- )
      if( pthread_create( &pthr, NULL, mythread, NULL ) != 0 )
        fprintf( stderr, "pthread_create\n" );
      else
        pthread_detach( pthr );

    putchar( '.' );
    fflush( stdout );
    usleep( 25000 );
  }
}

----- snap -----

Just to be sure I have also created the non-detaching version
which behaves in the same way:

----- snip pth2.c -----

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

#define M 1000

pthread_t pthr[M];

void* mythread( void* arg )
{
  return NULL;
}

int main( int argc, const char* const argv[] )
{
  int i;

  while( 1 ) {

    for( i=M; i; i-- )
      if( pthread_create( &pthr[i], NULL, mythread, NULL ) != 0 )
        fprintf( stderr, "pthread_create\n" );

    for( i=M; i; i-- )
      if( pthread_join( pthr[i], NULL ) != 0 )
        fprintf( stderr, "pthread_join\n" );

    putchar( '.' );
    fflush( stdout );
    usleep( 25000 );
  }
}

----- snap -----

Compile them using -pthread and watch their ps output in another
window (FreeBSD-9.2 but that shouldn't matter).

So what am I doing wrong here?

Thanks,

	-Andre


More information about the freebsd-hackers mailing list