Привет. Изучаю OpenMp, и при выполнении простейшего задания появились вопросы.
Я запускаю 8 потоков и хочу что бы если четный поток - записать цифру 1 в массив, под номером потока. Написал такую программу, но не понимаю почему std::cout << thread%2 << std::endl; выводит правильные значения, а уже на следующей строке if (thread%2 ==0) условие уже не отрабатывает? Это видно, когда в критическом блоке вывожу весь массив. Как исправить? Спасибо.
int main()
{
int i;
int threads = 8;
int thread;
int table[8] = { 0,0,0,0,0,0,0,0 };
omp_set_num_threads(8);
#pragma omp parallel
{
thread = omp_get_thread_num();
threads = omp_get_num_threads();
for (i = thread;i < threads;i += threads) {
std::cout << thread%2 << std::endl;
if (thread%2 ==0) {
table[thread] = 1;
}
}
#pragma omp critical
{
for (i = thread;i < threads;i += threads)
{
std::cout << table[i] << std::endl;
}
}
}
}