난 그냥 pthreads
을 사용하여 병렬 프로그래밍을 배우기 시작했습니다. 그래서, 학습 목적을 위해 나는 두 개의 정수 배열을 병렬 적으로 시도했습니다. 나는 배열 변수 a
, b
및 c
을 가지고 struct construct
을 선언했다. a
, b
을 추가하고 결과를 c
에 저장하고 싶습니다.pthread를 사용한 병렬 프로그래밍
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#define MAX 6
struct data {
int a[MAX];
int b[MAX];
int c[MAX];
};
void *addition(void *index) {
struct data *d1 = (struct data *)index;
printf("value of d1 structure=%d\n", d1->a[0]);
}
int main() {
int i, j, t;
struct data *item = NULL;
pthread_t threads[MAX];
item = (struct data *)malloc(sizeof *item);
printf("enter the value for arrray a\n");
for (i = 0; i < MAX; i++) {
scanf("%d", &item->a[i]);
}
printf("enter the value of array b\n");
for (j = 0; j < MAX; j++) {
scanf("%d", &item->b[j]);
}
for (t = 0; t < MAX; t++) {
pthread_create(&threads[t], NULL, addition, (void *)&item);
}
}
여기, 지금의 나는이 pthread_create()
에서 나는 기능뿐만 아니라, structure
의 도움으로 세 개의 인수를 전달하고 때 때문에 변수 a
및 b
이 함수 addition()
의 배열의 추가를 추가하지 않은 복사되지 않습니다. a
을 인쇄하면 쓰레기 값이 나옵니다. 아무도 pthread_create()
이 호출 한 함수 인수에 structure
변수를 복사하는 방법을 알려줄 수 있습니까?
'item'의 유형은 무엇인가에 대한 호출? '& item'의 타입은 무엇입니까? 당신이 그 때 그것을 알고있을 때 문제는 명백해야한다. –
스레드가 완료 될 때 처리를 동기화하려면'pthread_join()'호출이 필요합니다. 또한 스레드가 작동했음을 입증해야합니다. 6 개의 다른 스레드가 6 가지 계산을 수행하는 방법을 표시하지 않았습니다. 그들은 모두 데이터에 대한 액세스를 제어하지 않고 동일한 계산 (6 개의 추가 및 지정)을 수행합니다. 이것은 잠재적 인 문제의 주요 원인입니다. 작업량이 너무 적어서 스레드가 서로 간섭 할 기회가 없으므로 눈치 채지 못할 수 있습니다. 스레드 함수는 null 포인터 값을 반환해야합니다. 귀하의 컴파일러는 불평해야합니다! –