我正在使用C或python编写一个在Linux环境中具有多个线程的应用程序。我正在使用pthread。但是如何通过命令行接受线程数。
答案 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;
}
:
: