我正在从一个文件中获取15,000个整数的输入的程序。在读取值之后,线程应该创建10个线程,每个线程负责计算块的总和(每个值为1500)。然后每个线程将打印其值的总和,并且主线程将计算来自所有10个线程的总和。使用多线程计算总和
我的心是读取所有值并将它们存储在一个int数组中,同时使用int来保持读取的值的数量的计数(我们称之为int值)。然后我将这个数除以线程数,我想确定每个线程应该有的每块数值(我们称它为int块)。然后,我将启动一个线程,在增加数组索引计数的同时循环访问数组(int block times),然后只要数组索引计数不等于最后一个数组索引,就启动一个新线程。
这是看这个问题的正确方法吗?有一个更简单的方法吗?我们已经给出了使用pthread_create,pthread_join,pthread_exit,pthread_attr_init,pthread_attr_destroy和pthread_setdetachstate的提示。这是我第一次尝试多线程,所以能够获得关于我应该在哪些代码中启动并结束每个线程的反馈非常好,以便它实际上是多线程并且不会多次执行单个线程。任何帮助将不胜感激!
编辑:命令行参数卡住
#include <stdio.h>
int main(int argc, char *argv[]) {
int i;
FILE *fp;
int c;
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) {
fprint(stderr, "cat: can't open %s\n", argv[i]);
continue;
}
while ((c = getc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
return 0;
}
我似乎已经忘记了我是多么可怕的是在I/O时,我们讨论了这一节。什么是用给定参数测试我的程序(prob_5.c)的命令行参数?
且不说,这个问题将是I/O密集型:阅读在15,0 00整数从一个文件开始要比总结长一个数量级,不管它是单线程的还是多线程的。 –
最后一段的+1。在现实世界中,创建一个线程需要大约相同的时间总计15000个整数。并且请注意,如果您将读取整数并将它们的十进制表示法转换为二进制文件的工作,则可能会得到显着的加速。 –
我可能会尝试将读整数的工作拆分为额外的功劳。如果我将读数分开,我仍然可以获得任何速度增加,但将整数保留为小数形式,或者只有在将其转换为二进制形式时才会看到速度增加。 – raphnguyen