파일에서 15,000 개의 정수를 입력하는 프로그램을 작성 중입니다. 값을 읽은 후에 스레드는 각 스레드가 해당 블록의 합계를 계산할 책임이있는 10 개의 스레드를 생성해야합니다 (각각 1,500 개의 값). 그러면 각 스레드는 해당 값의 합계를 인쇄하고 주 스레드는 모든 10 개 스레드의 합계를 계산합니다.멀티 스레딩을 사용하여 합계 계산
내가 가지고있는 것은 모든 값을 읽고 int 배열을 사용하여 int 값을 읽는 (int 값이라고 부름) 횟수를 유지하는 것이다. 이 숫자를 각 스레드가 가져야하는 블록 당 값의 수를 결정하고자하는 스레드의 수로 나눕니다 (int 블록이라고 부름). 그런 다음 배열 색인 수를 증가시키면서 배열 (int 블록 시간)을 통해 스레드, 루프를 시작한 다음 배열 색인 수가 마지막 배열 색인과 같지 않은 한 새 스레드를 시작합니다.
이 문제를 해결하는 올바른 방법입니까? 더 간단한 접근법이 있습니까? 우리는 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 개의 정수를 합치는 것과 거의 같은 시간이 걸립니다. 그리고 정수를 읽고 십진수 표현을 쓰레드로 변환하는 작업을 분리하면 상당한 속도 향상을 얻을 수 있습니다. –
정수를 읽는 작업을 분할하려고 시도 할 수 있습니다. 독서를 분리해도 정수를 10 진수 형식으로 두거나 속도를 높이면 속도가 향상됩니까? – raphnguyen