seg fault on kse_release () (fwd)

Jose Hidalgo Herrera jose at hostarica.com
Tue Jan 25 16:17:21 PST 2005


This is my last try!, it worked for me, I reached a little more that
1000 threads, then I got the calloc error.
:-)





#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

#define NUM_THREADS     5000
#define THREADS_IN_ONE_PROCESS  5
#define BSIZE  500000

static int  cc;

void *PrintHello(void *);

pthread_mutex_t mtx;

void CreateThread(int n, int myid)
{
   int rc, t;
   unsigned long id;
        char * p;
   pthread_t threads[NUM_THREADS];
   assert( n <= NUM_THREADS );
   for(t=0;t < n;t++){
      printf("id:%d Creating thread %d\n",myid,t);
      rc = pthread_create(&threads[t], NULL, PrintHello, NULL);
      if (rc){
         printf("ERROR; return code from pthread_create() is %d\n", rc);
      }
   }

   pthread_mutex_lock(&mtx);
   p = (char *) calloc(BSIZE, sizeof(char) );
   if ( p == NULL )
   {
        pthread_mutex_unlock(&mtx);
	perror("calloc");
	pthread_exit(NULL);
   }
   pthread_mutex_unlock(&mtx);

   while (1)
   {
        while (BSIZE <= (id = rand() / (RAND_MAX/BSIZE)));
        p[id] ++;
   }
}


void *PrintHello(void * threadid)
{
   int * myid=NULL;

        pthread_mutex_lock(&mtx);
        myid=(int *)malloc(sizeof(int));
        if (myid==NULL){
      		pthread_mutex_unlock(&mtx);
                perror("malloc");
                pthread_exit(NULL);
        }
        *myid= cc++;
        pthread_mutex_unlock(&mtx);


   printf("\n%d: Hello World!\n", *myid);
   CreateThread(THREADS_IN_ONE_PROCESS,*myid);
   pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
        pthread_mutex_init(&mtx, NULL);
	CreateThread(THREADS_IN_ONE_PROCESS,0);
        pthread_mutex_destroy(&mtx);
}





More information about the freebsd-hackers mailing list