Функции блокировки.
Функция
void omp_init_lock ( omp_lock_t *lock )предназначена для инициализации блокировки объекта с указателем lock. Она не возвращает никаких значений.
Следующая функция
void omp_destroy_lock ( omp_lock_t *lock )гарантирует, что объект с указателем lock в данный момент не инициализирован.
С помощью функции
void omp_set_lock ( omp_lock_t *lock )можно организовать блокировку выполнения потока до тех пор, пока объект открыт для операций чтения-записи. После завершения операций чтения-записи объект блокируется и продолжается выполнение потока.
Для открытия заблокированного объекта с указателем lock можно воспользоваться функцией
void omp_unset_lock ( omp_lock_t *lock )Функция
int omp_test_lock ( omp_lock_t *lock )позволяет попытаться заблокировать объект, не прерывая выполнения потока. Она возвращает значение TRUE или 1, если попытка завершилась успешно. В противном случае возвращается значение FALSE или 0.
Ниже приведен пример фрагмента программы на языке C/C++, иллюстрирующий применение функций блокировки.
#include <omp.h>void main ( ){ omp_ lock_t lock; int myid; omp_init_lock (&lock);#pragma omp parallel shared(lock) private(myid) { myid = omp_get_thread_num ( ); omp_set_lock (&lock); printf ("Hello from thread %d\n", myid); omp_unset_lock (&lock); while (! omp_test_lock (&lock)) { skip (myid); } do_work (myid); omp_unset_lock (&lock); } omp_destroy_lock (&lock);}Пример 4.5. Пример фрагмента программы на языке C/C++, иллюстрирующий применение функций блокировки (html, txt)
Дата добавления: 2015-02-03; просмотров: 844;