나는 C에서 스레드를 구현하는 예를 다음입니다. 이 예제에서는 1 차원 배열을 사용하고 있습니다. 동적 인 2 차원 배열이 필요합니다.2 차원 배열 포인터
main()
에 int array[ARRAYSIZE]
대신 int **array
이 표시되면 어떻게됩니까?
내 문제 구조체에 2 차원 배열에 대한 포인터를 전달하는 방법이다. 아이디어는, 내가 큰 배열을 가지고, 각 스레드는 그 배열의 특정 영역을 채워야 만한다는 것입니다.
고맙습니다. 지금 당신이해야, 여기
int** array = malloc(sizeof(int*)*ARRAYSIZE);
당신이 int로 포인터의 배열을 할당 :
struct ThreadData {
int start, stop;
int* array;
};
void* squarer(struct ThreadData* td) {
struct ThreadData* data=(struct ThreadData*) td;
int start=data->start;
int stop=data->stop;
int* array=data->array;
int i;
for (i=start; i<stop; i++) {
array[i]=i*i;
}
return NULL;
}
int main(void) {
int array[ARRAYSIZE];
pthread_t thread[NUMTHREADS];
struct ThreadData data[NUMTHREADS];
int i;
int tasksPerThread=(ARRAYSIZE+NUMTHREADS-1)/NUMTHREADS;
for (i=0; i<NUMTHREADS; i++) {
data[i].start=i*tasksPerThread;
data[i].stop=(i+1)*tasksPerThread;
data[i].array=array;
}
/* the last thread must not go past the end of the array */
data[NUMTHREADS-1].stop=ARRAYSIZE;
/* Launch Threads */
for (i=0; i<NUMTHREADS; i++) {
pthread_create(&thread[i], NULL, squarer, &data[i]);
}
/* Wait for Threads to Finish */
for (i=0; i<NUMTHREADS; i++) {
pthread_join(thread[i], NULL);
}
/* Display Result */
for (i=0; i<ARRAYSIZE; i++) {
printf("%d ", array[i]);
}
printf("\n");
return 0;
}
이
고마워요! 말이된다 ! – user1841373