Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nell'esempio seguente, ad parte 3,2 nella pagina 41) si noti che l'argomento alle funzioni di blocco deve avere il tipoomp_lock_te tale evitando di arrossirla.Le funzioni di blocco determinano i thread per essere inattivi in attesa la voce nella prima sezione critica, ma per eseguire altre attività in attesa la voce al secondo.omp_set_lock blocchi funzionali, ma omp_test_lock la funzione contrario, consentendo il lavoro nel passaggio () da eseguire.
Esempio
Codice
// omp_using_locks.c
// compile with: /openmp /c
#include <stdio.h>
#include <omp.h>
void work(int);
void skip(int);
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);
printf_s("My thread id is %d.\n", id);
// only one thread at a time can execute this printf
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);
}