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