Внутри параллельного блока моего кода я ссылаюсь на приватную переменную потока, tid
.tid
назначается в директиве SECTIONS.
Однако, когда я печатаю его значение, я получаю значение мусора внутри параллельного блока, но вне блока секций.
Почему я получаю мусорзначение?
Что я знаю, вы обычно получаете значение мусора, если вы обращаетесь к переменной вне блока omp parallel
и не определяются как lastprivate
.
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
/* 4 threads, 1 core */
int main (int argc, char *argv[])
{
int nthreads, tid;
/* Fork a team of threads giving them their own copies of variables */
#pragma omp parallel private(tid)
{
#pragma omp sections
{
/* Obtain thread number */
tid = omp_get_thread_num();
printf("Hello World from thread = %d\n", tid);
/* Only master thread does this */
if (tid == 0)
{
nthreads = omp_get_num_threads();
printf("Number of threads = %d\n", nthreads);
}
printf("Inside sections %d \n" ,tid);
}
printf("Out of sections %d \n", tid );
#pragma omp single
{
printf("Inside single block %d \n" , tid);
}
} /* All threads join master thread and disband */
printf("Outside parallel block \n");
}
Ниже приведен вывод Iполучил:
Hello World from thread = 3
Inside sections 3
Out of sections 0
Inside single block 0
Out of sections 1
Out of sections 3
Out of sections -1078056856
Outside parallel block
Почему tid
дал это значение мусора (-1078056856)?