代码之家  ›  专栏  ›  技术社区  ›  Tauquir

使用pthread通过命令行应该接受多少个线程?

  •  1
  • Tauquir  · 技术社区  · 14 年前

    3 回复  |  直到 14 年前
        1
  •  2
  •   gspr    14 年前

    main

    int main(int argc, char** argv)
    

    argc 是命令行参数的数目(包括程序本身)和 argv 指向内存位置的指针 argc-1

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

    现在假设您的程序接受一个命令行参数,一个整数告诉您要生成多少个线程。整数是以字符串形式给出的,因此我们必须使用 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;
    }
    

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

    并在开始时使用它来存储线程句柄 num_threads pthread_create .

    如果您根本不熟悉pthread,我建议您 this short tutorial .

        2
  •  2
  •   Oliver Charlesworth    14 年前

    OpenMP ,则只需设置环境变量即可自动处理所有这些 OMP_NUM_THREADS

    但是,如果要“手动”实现线程,则需要按照大多数运行时配置的方式来执行:或者通过解析 argv[] ,或通过设置环境变量并使用 getenv() .

        3
  •  1
  •   paxdiablo    14 年前

    通常,你会像其他论点一样通过它。我以前在项目中使用过类似于下面的代码来指定固定线程数。这相当简单,但适用于不需要线程池的全部功能的情况(尽管可以同样轻松地设置最小和最大线程数)。

    #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;
        }
        :
        :