テキスト ファイルから 20000 個の文字列を読み取り、それを他のプログラムに送信する C プログラムを作成しました。このテキスト ファイルをループし、そのテキストを他のプログラムに送信するスレッドを作成するためにしばらく使用しました。しかし、4つのスレッドだけが機能するようにします。そのため、カウンターを使用してデクリメントし続け、カウンターをチェックする if 条件を使用して、カウンターが 1 に設定されると、前のスレッドに対して pthread_join を呼び出しました。最初にこれら 4 つのスレッドを終了し、次に新しい 4 つのスレッドを終了して、新しいテキスト ファイルの文字列を取得します。しかし、必要に応じて機能していません。4 スレッドごとに 4 回だけ処理します。テキスト ファイルからすべてのレコードを取得するわけではありません。
プログラム:-
int Read_record()
{
printf("Inside Read_record()\n");
pthread_t threads;
int rc;
char l_record[300];
int thNum=4;
while(1){
MEMSET(g_record);
if(fgets(g_record,300,g_r_fp)==NULL){
printf("End of File.\n");
break;
}else{
//printf("%s",g_record);
printf("%s",g_record);
rc = pthread_create(&threads, NULL, &Get_report, (void *)g_record);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
thNum--;
}
if(thNum==0){
pthread_join(threads, NULL);
thNum=4;
}
}
return 0;
}
入力テキスト ファイルの内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14
出力は次のとおりです。
Inside Read_record()
1
2
3
4
Inside Get_report, wget 4
Inside Get_report, wget 4
Inside Get_report, wget 4
Inside Get_report, wget 4
5
6
7
8
Inside Get_report, wget 8
Inside Get_report, wget 8
Inside Get_report, wget 8
Inside Get_report, wget 8
9
10
11
12
Inside Get_report, wget 12
Inside Get_report, wget 12
Inside Get_report, wget 12
Inside Get_report, wget 12
13
14
15
16
Inside Get_report, wget 16
Inside Get_report, wget 16
Inside Get_report, wget 16
Inside Get_report, wget 16
17
18
19
20
Inside Get_report, wget 20
Inside Get_report, wget 20
Inside Get_report, wget 20
Inside Get_report, wget 20
End of File.
欲求出力:-
Inside Get_report, wget 1
Inside Get_report, wget 2
Inside Get_report, wget 3
Inside Get_report, wget 4
Inside Get_report, wget 5
Inside Get_report, wget 6
Inside Get_report, wget 7
Inside Get_report, wget 8
Inside Get_report, wget 9
Inside Get_report, wget 10
Inside Get_report, wget 11
Inside Get_report, wget 12.
and so on..
システムで作成するスレッドは 4 つだけです。それ以上ではありません。