Паралелни бележки N4 - Продължаване на изследването на OpenMP конструкции

Нека да продължим запознаването си с технологията OpenMP и да разгледаме някои функции и нови директиви.

В OpenMP има редица помощни функции. За да ги използвате, не забравяйте да включите заглавния файл .

Функции по време на изпълнение

Тези функции ви позволяват да запитвате и задавате различни параметри на средата OpenMP:

Ако името на функцията започва с omp_set_, тогава тя може да бъде извикана само извън паралелни региони. Всички останали функции могат да се използват както в паралелни региони, така и извън тях.

Функции за синхронизация/заключване

OpenMP ви позволява да изграждате паралелен код, без да използвате тези функции, тъй като има директиви, които позволяват определени видове синхронизация. В някои случаи обаче тези функции са удобни и дори необходими.

OpenMP има два вида брави: проста и вложена. Вложените елементи имат суфикса "гнездо". Бравите могат да бъдат в едно от трите състояния - неинициализирани, заключени и отключени.

  • omp_init_lock/omp_init_nest_lock - инициализация на променлива от типа omp_lock_t/omp_nest_lock_t. Аналог на InitializeCriticalSection.
  • omp_destroy_lock/omp_destroy_nest_lock - освободете променлива от типа omp_lock_t/omp_nest_lock_t. Аналог на DeleteCriticalSection.
  • omp_set_lock/omp_set_nest_lock - една нишка задава заключване, а останалите нишки изчакват, докато нишката, която е извикала тази функция, освободи заключването с помощта на функцията omp_unset_lock (). Аналогов EnterCriticalSection.
  • omp_unset_lock/omp_unset_nest_lock - отключване. Аналог на LeaveCriticalSection.
  • omp_test_lock/omp_test_nest_lock - неблокиращ опит за улавяне на замък. Тази функция се опитва да улови определената ключалка. Ако успее, тогава за обикновено заключване функцията връща 1. Ако не беше възможно да се улови заключването, се връща 0. Аналог на TryEnterCriticalSection.