Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create a dynamic number of threads

I want to create a number of threads specified by the user. The code I have written for this is:

int nhijos = atoi(argv[1]);

thread = malloc(sizeof(pthread_t)*nhijos);

for (i = 0; i < nhijos; i++){
  if (pthread_create ( &thread[i], NULL, &hilos_hijos, (void*) &info ) != 0){
  perror("Error al crear el hilo. \n");
  exit(EXIT_FAILURE);
}   

Is this correct?

like image 260
Alessandroempire Avatar asked Jun 22 '12 16:06

Alessandroempire


Video Answer


1 Answers

Yes, but I would do the following:

  1. validate that argc > 1 before calling atoi(argv[1])

  2. validate numberOfThreads is a positive number and less than a reasonable range. (In case the user types 1000000).

  3. validate the return value from malloc is not null.

  4. pthread_create will not set errno on failure. So perror may not be the right function to call on failure.

...

if (argc > 1)
{
    int numberOfThreads = atoi(argv[1]); 
    if ((numberOfThreads <= 0) || (numberOfThreads > REASONABLE_THREAD_MAX))
    {
        printf("invalid argument for thread count\n");
        exit(EXIT_FAILURE);
    }
 
    thread = malloc(sizeof(pthread_t)*numberOfThreads); 
    if (thread == NULL)
    {
       printf("out of memory\n");
       exit(EXIT_FAILURE);
    }

    for (i = 0; i < numberOfThreads; i++)
    { 
        if (pthread_create ( &thread[i], NULL, &hilos_hijos, (void*) &info ) != 0)
        { 
            printf("Error al crear el hilo. \n"); 
            exit(EXIT_FAILURE); 
        }    
    }
like image 192
selbie Avatar answered Sep 29 '22 09:09

selbie