Почему он пишет что оно не shared? OPENMP?

Ошибка "оно не shared" может возникнуть в контексте использования директивы OpenMP, когда вы указываете переменную, которая должна быть разделяемой (shared), но компилятор сообщает обратное.

В OpenMP существуют два типа переменных: локальные и разделяемые. Локальные переменные создаются для каждого потока и существуют только внутри этого потока. Разделяемые переменные, напротив, создаются только один раз и разделяются между всеми потоками.

Для указания переменной как разделяемой, в OpenMP используется директива shared. Например:

#pragma omp parallel shared(a)
{
  // код, работающий с переменной a
}

В данном примере переменная "a" указана как разделяемая (shared), и она будет доступна для чтения и записи во всех потоках, участвующих в параллельной области.

Однако, в случае ошибки "оно не shared", это может означать, что переменная, которая фактически должна была быть разделяемой, не была правильно объявлена.

Например, если у вас есть следующий код:

int a = 0;

#pragma omp parallel
{
  // код, работающий с переменной a
}

И вы получаете ошибку "оно не shared", то это означает, что переменная "a" не была объявлена как разделяемая. Для исправления этой ошибки следует явно указать, что переменная "a" должна быть разделяемой:

int a = 0;

#pragma omp parallel shared(a)
{
  // код, работающий с переменной a
}

Теперь переменная "a" будет разделяемой и доступной для чтения и записи во всех потоках.

В заключение, ошибка "оно не shared" в контексте OpenMP указывает на неправильное объявление переменной. Чтобы исправить эту ошибку, необходимо явно указать переменную как разделяемую с помощью директивы shared.