我在this exercise上更进一步,并且不确定是否应该使用我的更新代码发布答案,编辑原始帖子或提出新问题。如果我不遵守协议,请告知。
到目前为止我所做的是在输入文件中读取并将所有整数分配给数组。然后,我将整数总数(索引)除以线程数( number_of_threads ),以找到最佳 numbers_per_thread 。
然后我创建一个while循环来递增数组中的所有数字,根据最佳 numbers_per_thread 分配每个数字块。
prob_5.c
#include <stdio.h>
int main(int argc, char *argv[]) {
int i, j;
FILE *fp;
int values[15000];
char line[32];
int index = 0;
int number_of_threads = 10;
int numbers_per_thread;
for (i = 1; i < argc; i++) {
fp = fopen(argv[i], "r");
if (fp == NULL) {
fprintf(stderr, "cat: can't open %s\n", argv[i]);
continue;
}
while (fgets(line, sizeof(line), fp) != NULL && (index < 15000)) {
sscanf(line, "%d", &values[index]);
index++;
}
fclose(fp);
}
numbers_per_thread = index / number_of_threads;
while (i < index) {
for (j = 0; (j < numbers_per_thread) && (i < index); j++) {
i++;
j++;
}
}
printf("%d\n", index);
return 0;
}
我对如何处理线程的启动和停止感到困惑。我应该在我的for(j = 0; ..)循环中启动它,然后创建一个if(j == numbers_per_thread)来结束线程吗?我应该创建一个新数组来容纳每个线程的数字块吗?我想我对如何使用pthread_create,pthread_join等感到困惑,因为这是我第一次尝试使用它们。
答案 0 :(得分:0)
我会创建一个pthread_t
值数组来存储您创建的每个线程的ID。在读取值数组后,在循环中创建它们,然后立即执行另一个循环以将它们全部连接起来。之后,您可以获取各个部分金额并将它们加在一起以获得最终金额。