mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
41 lines
784 B
C
41 lines
784 B
C
/*
|
|
* @@name: simple_lock.1c
|
|
* @@type: C
|
|
* @@compilable: yes
|
|
* @@linkable: yes
|
|
* @@expect: success
|
|
*/
|
|
#include <stdio.h>
|
|
#include <omp.h>
|
|
void skip(int i) {}
|
|
void work(int i) {}
|
|
int main()
|
|
{
|
|
omp_lock_t lck;
|
|
int id;
|
|
omp_init_lock(&lck);
|
|
|
|
#pragma omp parallel shared(lck) private(id)
|
|
{
|
|
id = omp_get_thread_num();
|
|
|
|
omp_set_lock(&lck);
|
|
/* only one thread at a time can execute this printf */
|
|
printf("My thread id is %d.\n", id);
|
|
omp_unset_lock(&lck);
|
|
|
|
while (! omp_test_lock(&lck)) {
|
|
skip(id); /* we do not yet have the lock,
|
|
so we must do something else */
|
|
}
|
|
|
|
work(id); /* we now have the lock
|
|
and can do the work */
|
|
|
|
omp_unset_lock(&lck);
|
|
}
|
|
omp_destroy_lock(&lck);
|
|
|
|
return 0;
|
|
}
|