Переменные стека OpenMP - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я изучаю OpenMP. Переменные по умолчанию, объявленные вне параллельной области, являются открытыми, а переменные внутри параллельной области являются закрытыми. Также переменные стека внутри параллельных областей являются частными.

double A[10];
int index[10];
#pragma omp parallel
{
 work(index);
}
printf(%d\n”,index[0]);

Но почему "index" в приведенном выше примере общедоступен для каждого потока? Разве он не должен быть закрытым, поскольку он помещен в стек, а переменные стека являются закрытыми?

Заранее спасибо

1 Ответ

0 голосов
/ 22 января 2019

Оператор

Стек переменные в функциях C , вызываемые из параллельные области private

верно, но вы должны дифференцировать в вашем случае.Во-первых,

int index[10];
#pragma omp parallel
{
    // index is a shared variable here
    work(index);
}

Но когда дело доходит до вызываемой вами функции, представьте:

void work(int* passed_index)
{
    ...
}

passed_index - указатель - фактически является private переменной в work.Вы можете изменить указатель, и никакой другой поток не заметит.

Но данные, на которые указывает *passed_index, все еще доступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...