我正在写一个应用程序,它在使用C或python的Linux环境中有多个线程。我正在使用pthread。但是如何通过命令行接受多少个线程。如何通过命令行使用pthread接受多少线程?
回答
在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。
如果您使用的是线程框架,如OpenMP,那么只需设置环境变量OMP_NUM_THREADS
即可自动处理。
但是,如果您要“手动”实现线程,则需要按照大多数运行时配置完成的方式执行:通过解析argv[]
或设置环境变量并使用getenv()
。
通常情况下,您可以像其他任何参数一样传递它。我在之前的项目中使用类似于以下代码来指定固定线程数。这非常简单,但适用于不需要线程池的全部功能的情况(尽管您可以用同样的方法轻松设置最小和最大线程数)。
#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;
}
:
:
微小风格的狡辩:为了清晰和一致,总是使用'argc'和'argv'不是标准做法吗? – 2010-10-05 09:59:18
其实我通常使用'argCount'和'argVal',因为我更喜欢更可读的名称(这与我在实际代码中很少使用'i'作为计数器的原因相同),但我很着急:-) – paxdiablo 2010-10-05 10:09:06
- 1. 如何让程序在命令行接受glob(通配符)?
- 2. 如何通过命令行使用MSDeploy?
- 3. pthread多线程
- 4. 通过命令行程序使用forfiles
- 5. 通过pthread跨多台计算机运行线程?
- 6. 如何通过命令行
- 7. 如何通过命令行
- 8. 如何通过命令行
- 9. 如何通过命令行
- 10. 如何通过命令行参数来线程函数
- 11. 如何让HTA应用程序接受命令行参数?
- 12. 如何让jenkins通过xmpp接受命令?
- 13. 如何通过命令行选择多个网络连接?
- 14. 多线程设置线程数量通过命令行参数或
- 15. rsync命令在命令行中最多接受2个参数
- 16. 如何使用Python接受命令行参数<
- 17. 如何在Java中使用命令行参数来接受值
- 18. 如何使用Ant接受可选的命令行参数?
- 19. 如何通过URL链接,使在命令行空格
- 20. 通过命令行应用程序
- 21. 如何通过命令行用硒罐子运行Java程序
- 22. 我希望我的程序通过命令行接受文件路径
- 23. 如何在Windows命令行中通过WSL调用Linux命令?
- 24. 通过命令行
- 25. 通过命令行
- 26. 通过命令行
- 27. 通过命令行
- 28. 通过命令行
- 29. 通过命令行
- 30. 通过命令行
threads = malloc(num_threads * sizeof(pthread_t)); tr = pthread_create(&threads,NULL,NULL,NULL);从不兼容的指针类型传递参数1(警告它显示) – Tauquir 2010-10-05 11:11:55
谢谢,是的我不熟悉pthread.how我应该为睡眠做随机间隔一旦醒来,在字符串中写入自己的名字 – Tauquir 2010-10-05 11:13:45
关于代码在你的评论中:&线程表示指针线程的地址。当创建第i个线程时,您需要&线程[i](数组线程的第i个元素的地址)。 – gspr 2010-10-05 12:03:12