【发布时间】:2017-05-14 03:59:40
【问题描述】:
我有一个 C 语言程序,它将任意数量的文件作为命令行参数,并为每个文件计算 sha1sum。我正在使用 pthreads,这样我就可以利用所有 4 个内核。
目前,我的代码同时并行运行所有线程。 这是一个sn-p:
c = 0;
for (n = optind; n < argc; n++) {
if (pthread_create(&t[c], NULL, &sha1sum, (void *) argv[n])) {
fprintf(stderr, "Error creating thread\n");
return 1;
}
c++;
}
c = 0;
for (n = optind; n < argc; n++) {
pthread_join(t[c], NULL);
c++;
}
显然,一次启动所有线程是不高效的(或可扩展的)。
确保任何时候只有 4 个线程在运行的最佳方法是什么?不知何故,我需要在开始时启动 4 个线程,然后在完成后立即用新线程“替换”一个线程。
我该怎么做?
【问题讨论】: