我想创建由用户指定的多个线程。我为此编写的代码是:

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);
}

这样对吗?

最佳答案

是的,但我会执行以下操作:

  • 在调用atoi(argv [1])之前验证argc> 1
  • 验证numberOfThreads是一个正数,并且小于合理范围。 (如果用户键入1000000)。
  • 验证malloc的返回值不为null。
  • pthread_create不会在失败时设置errno。因此,错误可能不是调用失败的正确功能。

  • ...
    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);
            }
        }
    

    09-25 17:43