Risshuu
Risshuu

Reputation: 101

multi-threading limit?

I am writing a program using threads in c++ in linux.

Currently, I am just keeping an array of threads, and every time one second has elapsed, I check to see which have finished, and restart them. Is this bad? I need to keep this program running for a long time. As it is now, I am getting a code 11 after so many loops of restarting threads (the 100th loop in the last trial). I figured that reusing threads and making sure I only have a small number of them running at any one time, that I would not hit the limit. The array I am using only has a size of 8 (of course, I am not starting 8 each time, just those that have stopped).

Any ideas?

My code is below:

if ( loop_times == 0 || pthread_kill(threads[t],0) != 0 ) 
{ 
    rc = pthread_create(&threads[t], NULL, thread_stall, (void *)NULL); 
    if (rc){ 
        printf("ERROR; return code from pthread_create() is %d\n", rc); 
        exit(-1); 
    } 
thread_count++; 
} 

The loop_times variable is just so that I can get into the loop and start the threads the first time. Otherwise, I get a SEGFAULT because the threads haven't been started before.

Also, I have been wanting to see the value of PTHREAD_THREADS_MAX, but I can't print it (even when including limits.h)

Upvotes: 0

Views: 1351

Answers (2)

Risshuu
Risshuu

Reputation: 101

As it turns out, my problem was that I needed to pthread_join my thread before I restarted it each time. After this, I stopped getting a code 11 and stopped having "still reachable" memory when running it through Valgrind.

Upvotes: 1

Raghuram
Raghuram

Reputation: 3967

If you want to use multiple threads...It better to go for thread pool. Start a set of threads as detached ones and then through a queue you can send info to every thread so that it can work on that and wait for next input from you.

Upvotes: 2

Related Questions