如何使用pthread通过命令行接受线程数?

时间:2010-10-05 09:45:17

标签: c linux pthreads

我正在使用C或python编写一个在Linux环境中具有多个线程的应用程序。我正在使用pthread。但是如何通过命令行接受线程数。

3 个答案:

答案 0 :(得分:2)

如果您使用的是OpenMP之类的线程框架,那么只需设置环境变量OMP_NUM_THREADS即可自动处理。

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

答案 1 :(得分:2)

在C中,通过让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个线程数。

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

答案 2 :(得分:1)

通常,您只需像任何其他参数一样传递它。我之前在项目中使用了类似以下的代码来指定固定的线程数。这非常简单,但适用于您不需要线程池的全部功能的情况(尽管您可以轻松地以相同的方式设置最小和最大线程数)。

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