Cでスレッドを実装する例を以下に示します:http://ramcdougal.com/threads.html。この例では、1次元配列を使用しています。動的な2次元配列が必要です。
代わりにmain()
それがあったとしたら、それはどのように見えるでしょうか?int **array
int array[ARRAYSIZE]
私の問題は、2次元配列へのポインタを構造体に渡す方法です。アイデアは、私には大きな配列があり、各スレッドはその配列の特定の領域のみを埋める必要があるということです。
どうもありがとう !
例のコードは次のとおりです。
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;
}