seg fault on kse_release () (fwd)
Yan Yu
yanyu at CS.UCLA.EDU
Tue Jan 25 16:51:03 PST 2005
Cool, Thanks A LOT for looking into this! I appreciate it!
after I reduce the BSIZE to 50k, it can create more than 10k threads
before calloc error.. so i am going to drop this thread:)
(just fyi, i use your prog on our machine w/ BSIZE =500k
(~512M Ram), again i got SEG fault before the calloc error after it
creates 913 threads, this number is repeatable.. so it is wierd..
as suggested by others, it might be a lib related prob., we may use a diff
lib etc..
i am going to look into this later..
Thanks again!
yan
On Tue, 25 Jan 2005, Jose Hidalgo Herrera wrote:
> 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