3.2 Lock Functions

 

The functions described in this section manipulate locks used for synchronization.

For the following functions, the lock variable must have type omp_lock_t. This variable must only be accessed through these functions. All lock functions require an argument that has a pointer to omp_lock_t type.

  • The omp_init_lock function initializes a simple lock.

  • The omp_destroy_lock function removes a simple lock.

  • The omp_set_lock function waits until a simple lock is available.

  • The omp_unset_lock function releases a simple lock.

  • The omp_test_lock function tests a simple lock.

For the following functions, the lock variable must have type omp_nest_lock_t. This variable must only be accessed through these functions. All nestable lock functions require an argument that has a pointer to omp_nest_lock_t type.

  • The omp_init_nest_lock function initializes a nestable lock.

  • The omp_destroy_nest_lock function removes a nestable lock.

  • The omp_set_nest_lock function waits until a nestable lock is available.

  • The omp_unset_nest_lock function releases a nestable lock.

  • The omp_test_nest_lock function tests a nestable lock.

The OpenMP lock functions access the lock variable in such a way that they always read and update the most current value of the lock variable. Therefore, it is not necessary for an OpenMP program to include explicit flush directives to ensure that the lock variable's value is consistent among different threads. (There may be a need for flush directives to make the values of other variables consistent.)