Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 18 Feb 2014 19:06:46 +0100
From:      Andre Albsmeier <mail@ma17.ata.myota.org>
To:        freebsd-hackers@freebsd.org
Cc:        mail@ma17.ata.myota.org
Subject:   pthread programming eats up resources (My or FreeBSD's fault?)
Message-ID:  <20140218180646.GA67861@schlappy>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140218180646.GA67861>