Быстрый вопрос ... У меня есть следующий код:
void testingOMP()
{
#pragma omp parallel for
for(int i=0;i<5;i++)
{
#pragma omp single
cout << "During single: " <<omp_get_thread_num() << endl;
cout << "After single: " << omp_get_thread_num() << endl;
}
}
, который зависает, давая следующий вывод:
Во время одиночного: 1 После одиночного: 1 После одиночного: После сингла: 2Dure сингл: 0
1
Мне пришлось нажать Ctrl + C, чтобы остановить его.Одна директива разделения работы гарантирует, что только один поток выполняет блок кода, имеющий в конце барьер синхронизации.Я думаю, что это проблема, потому что, если я использую master (который не ждет) или добавляю nowait, программа не зависает.
Если бы кто-нибудь мог сказать мне, почему это происходит, я был бы очень признателен.