pthread_create returns error code 11

J

Joy

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!

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;
rc = pthread_create (&threads[j], &attr, run_actree, (void
*)
&data[j]);
if (rc) {
printf ("ERROR; return code from pthread_create() is %d
\n", rc);
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.
 
B

Bart van Ingen Schenau

Joy said:
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;
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,055
Latest member
SlimSparkKetoACVReview

Latest Threads

Top