Проблема в том, что у вас есть только один id
, и доступ к нему сериализован.Предоставляя каждому потоку доступ к своим собственным id
, они могут выполняться параллельно, поэтому мы хотим изменить прагму на:
#pragma omp parallel private(id)
Таким образом, доступ к id
не сериализуется, икаждый поток может выполняться самостоятельно, поэтому мы получаем вывод, подобный этому:
>> omp_get_max_thread()
>> 4
>> omp_set_num_threads(4)
>> omp_get_num_threads()
>> 1
>> omp_get_thread_num()
>> 0
>> omp_get_thread_num()
>> 3
>> omp_get_thread_num()
>> 2
>> omp_get_thread_num()
>> 1