2011-09-15 10 views
1

私はもうちょっと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

pthread_tの配列を作成して、作成する各スレッドのIDを格納します。値の配列を読んだ後、それらをループ内に作成し、直ちに別のループを実行してそれらをすべて結合します。その後、個々の部分和を取ってそれらを合計して、最終的な合計を得ることができます。

+0

提案をいただきありがとうございます。私はpthread_tスレッド[number_of_threads]を追加し、forループを作成しました。for(i = 0; i raphnguyen

関連する問題