我正在從一個文件中獲取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