Work1();
} #pragma omp single printf("Finishing work1. Thread %d\n", omp_get_thread_num());// барьерная //синхронизация, в конструкции отсутствует nowait т.е. // блок ожидает окончания работы предыдущего блока #pragma omp single nowait { printf("Beginning work2. Thread %d\n", omp_get_thread_num());// нет барьерной //синхронизации, т.к. в конструкции используется nowait Work2(); } } Лекция 10 Технология программирования OpenMP. Операции синхронизации потоков. Переменные окружения и стандартные функции интерфейса OpenMP.
Операции синхронизации:
1. master определяет блок программы, который будет выполнен только основной нитью группы. Остальные нити пропускают данный участок и продолжают работу с выполнения оператора, расположенного следом за директивой master. Синтаксис оператора master: #pragma omp master { Блок программы } Барьерная синхронизация при входе или выходе из этой секции выполняться не будет.
2. critical определяет блок программы, который ограничивает выполнение структурированного блока только одной нитью в одно и тоже время. Синтаксис оператора critical: #pragma omp critical [(имя_критической_секции)] {
|