Я написал программу, которая ищет элемент в целочисленном массиве 100000000 и инициализирует его i + 1 (i - это индекс элемента). Теперь в этом я ищу 73500320 и обновляет integer 'me' до 1, если он найден, 'me' был инициализирован -1. Но когда я напечатать меня, иногда печатает, как -1, а иногда 1. (Он всегда должен быть найден!) Я не могу понять ошибку ...Неверный ответ openMP-кода в c
#pragma omp parallel
{
int thread = omp_get_thread_num();
int num_thread=omp_get_num_threads();
int beginpos = (thread + 0) * (100000000/num_thread);
int endpos = (thread + 1) * (100000000/num_thread);
for (i = beginpos; i < endpos; i++)
{
#pragma omp flush(done)
if (done == 1)
{
break;
}
if (a[i] == 73500320)
{
/* Inform the other threads that we found the element. */
done = 1;
#pragma omp flush(done)
me = 1;
break;
}
}
}
хорошо вы сообщить другой поток, сделанный изменила, но вы должны зафиксировать вокруг «каждого чтения/write of "done" – alexbuisson
Этот код нигде не устанавливает 'me' в' -1'. –
согласен, но это может быть объяснено, потому что вы установили и уведомили об этом, прежде чем установить меня в 1. Я не могу проверить сейчас, поэтому я не буду отвечать, но попытаюсь установить «я» до «сделано» – alexbuisson