Найти максимальное число в 2d массиве с резьбой - PullRequest
0 голосов
/ 24 февраля 2012

Я хочу создать один поток для каждой строки моего 2D-массива. Затем каждый поток должен найти максимальное значение в данной строке, но я не могу дождаться завершения какого-либо потока с pthread_join. Так что мне делать?

1 Ответ

1 голос
/ 24 февраля 2012

Насколько я понимаю, вы хотите разделить 2D-массив на 1D-массивы и передать их потокам, но вы не знаете, что делать, когда каждый из этих потоков находит максимум в своем "собственном" массиве - а Я не хочу передавать это значение в pthread_exit() и получить его по pthread_join() в главном потоке.

Вы можете использовать глобальный массив, управляемый основным потоком, для хранения этих значений. Вот идея (псевдокод):

int* max; // global

thread(...){
int localMax = 0;
...
max[rowIndex] = localMax;
}

// main thread:
max = malloc (rowCount * sizeof(int));
...
free(max);

Каждый поток находит локальный максимум localMax в данном массиве (строке) и сохраняет его в массиве max.

Но в конце вам придется использовать pthread_join, чтобы вы знали, что все потоки закончили свою работу.

...