У меня есть два похожих кода.
Первый
#pragma omp parallel for shared(g) private(i) schedule(dynamic, 1)
for(i = (*g).actualNumberOfChromosomes; i < (*g).maxNumberOfChromosomes; i++)
{
AddCrossoverChromosome(g, i); // it doesnt change actualNumberOfChromosomes
#pragma omp atomic
(*g).actualNumberOfChromosomes++;
}
Второй
#pragma omp parallel for shared(g) private(i) schedule(static, 1)
for(i = (*g).actualNumberOfChromosomes; i < (*g).maxNumberOfChromosomes; i++)
{
AddCrossoverChromosome(g, i); // it doesnt change actualNumberOfChromosomes
#pragma omp atomic
(*g).actualNumberOfChromosomes++;
}
Разница только в первой строке. Первый код работает нормально, но второй вылетает. Почему?
Проблема где-то в actualNumberOfChromosomes
, но я бы хотел понять почему, а не просто решить это. Я мог бы решить это, создав переменную сложения p
и присвоив ей actualNumberOfChromosomes
и изменив цикл так, чтобы i
был равен p
.