Tauquir
Tauquir

Reputation: 6913

how number of thread should be accepted via command line using pthread?

I am writting an application that has multiple threads in Linux environment using C or python. I am using pthread for that. But How number of threads should be accepted via command line.

Upvotes: 1

Views: 2968

Answers (3)

paxdiablo
paxdiablo

Reputation: 881223

Usually, you would just pass it like any other argument. I've used code similar to the following in projects before to specify fixed thread counts. This is fairly simple but suitable for situations where you don't need the full power of thread pooling (though you could just as easily set a minimum and maximum thread count the same way).

#include <stdio.h>

#define THRD_DFLT  5
#define THRD_MIN   2
#define THRD_MAX  20

static int numThreads = 0;
int main (int argCount, char *argVal[]) {
    if (argCount > 1)
        numThreads = atoi (argVal[1]);
    if ((numThreads < 5) || (numThreads > THRD_MAX)) {
        printf ("Number of threads outside range %d-%d, using %d\n",
            THRD_MIN, THRD_MAX, THRD_DFLT);
        numThreads = THRD_DFLT;
    }
    :
    :

Upvotes: 1

gspr
gspr

Reputation: 11227

In C you handle command line arguments by having main take two arguments,

int main(int argc, char** argv)

in which argc is the number of command line arguments (including the program itself) and argv is a pointer to a memory location where argc-1 pointers to strings with the actual arguments are located. Example:

int main(int argc, char** argv)
{
  printf("The program was executed as %s.\n", argv[0]);
  printf("The arguments were:\n");
  for (int i = 1; i < argc; i++)
    printf("%s\n", argv[i]);
  return 0;
}

Let's now assume that your program takes a single command line argument, an integer telling you how many threads to spawn. The integer is given as a string, so we have to convert it using atoi:

if (argc != 2)
{
  printf("Need exactly one argument!\n");
  return 1;
}
int num_threads = atoi(argv[1]); // Convert first argument to integer.
if (num_threads < 1)
{
  printf("I'll spawn no less than 1 thread!\n");
  return 2;
}

Now what you do is simply create an array of thread handles,

pthread_t* threads = malloc(num_threads*sizeof(pthread_t));

and use it to store the thread handles as you start num_threads number of threads using pthread_create.

If you are not familiar with pthreads at all, I recommend this short tutorial.

Upvotes: 2

Oliver Charlesworth
Oliver Charlesworth

Reputation: 272467

If you were using a threading framework like OpenMP, then this is all handled automatically simply by setting the environment variable OMP_NUM_THREADS.

But if you're implementing threads "manually", you'll need to do it the way most runtime configuration is done: either by parsing argv[], or by setting an environment variable and using getenv().

Upvotes: 2

Related Questions