Re: pthread_create returns error code 11
Joy wrote:
i have a code that uses pthread, but when i use pthread_create()
method it returns error code 11. I have found out that this is often
because of exceeding the THREAD_MAX limit for the process. But i want
to use only about 24 threads at a given time, and i destroy the
threads (or atleast i thought so) can someone tell me what i am doing
wrong here it would be of great help! thanks!
First off, 24 threads sounds like an awful lot to me.
Is there any particular reason you need so many? Because unless you are
working on a serious multi-processor/multi-core machine, there is no way
that this many threads is going to buy you anything in processor
utilisation.
for (i=0; i<no_pairs; ){
for (j=0; j<MAX_THREADS && i<no_pairs; j++,i++){
data[j].a = seeds[i/no_seeds];
data[j].b = seeds[i%no_seeds];
data[j].N = N;
data[j].L = nones+nzeros;
data[j].p1 = get_string (seeds[i/no_seeds], nzeros
+nones-1);
data[j].p2 = get_string (seeds[i%no_seeds], nzeros
+nones-1);
data[j].results = pairs[i];
rc = pthread_create (&threads[j], &attr, run_actree, (void
*)
&data[j]);
if (rc) {
printf ("ERROR; return code from pthread_create() is
%d
\n", rc);
It might be helpful in understanding when the error occurs to print i
and j as well.
exit (-1);
}
}
for (k=0; k<j; k++){
rc = pthread_join (threads[k], &status);
if (rc) {
printf("ERROR; return code from pthread_join() is %d
\n", rc);
exit(-1);
}
}
}
pthread_attr_destroy (&attr);
Above is the main loop i create threads in, MAX_THREADS = 24
Any help as to where i am going wrong is greatly appreciated.
My guess is that the value of MAX_THREADS also includes the thread that
is spawning all the others. If that is so, the failure will occur at
j==23.
Bart v Ingen Schenau
--
a.c.l.l.c-c++ FAQ: http://www.comeaucomputing.com/learn/faq
c.l.c FAQ: http://c-faq.com/
c.l.c++ FAQ: http://www.parashift.com/c++-faq-lite/