Главная / Параллельное программирование с OpenMP / Найдите ошибку в следующем фрагменте программы: #define N 10 int A[N],B[N], sum; #pragma omp parallel default(shared) num_threads(10) { int iam=omp_get_thread_num(); if (A[iam] > 0) { #pragma omp critical (update_a) sum +=A[iam]; } if (B[iam] > 0) {

Найдите ошибку в следующем фрагменте программы: #define N 10 int A[N],B[N], sum; #pragma omp parallel default(shared) num_threads(10) { int iam=omp_get_thread_num(); if (A[iam] > 0) { #pragma omp critical (update_a) sum +=A[iam]; } if (B[iam] > 0) { #pragma omp critical (update_b) sum +=B[iam]; } }

вопрос

Правильный ответ:

чтение общих переменных А[iam] и B[iam] в операторах вида A[iam]>0 и B[iam]>0 выполняется без какой-либо синхронизации
изменение общей переменной sum внутри критических секций update_a и update_b может выполняться одновременно несколькими нитями, поскольку названия критических секций отличаются
в данном фрагменте программы ошибки нет
Сложность вопроса
93
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Очень сложно
Сложно
Средне
Легко
Очень легко
Комментарии:
Аноним
Я провалил зачёт, за что я не углядел этот крутой сайт с решениями с тестами intuit в начале сессии
21 дек 2019
Аноним
Я провалил зачёт, почему я не углядел этот крутой сайт с ответами по тестам интуит в начале сессии
08 авг 2018
Оставить комментарий
Другие ответы на вопросы из темы программирование интуит.