OpenMP: заменить критическую секцию блокировками - PullRequest
0 голосов
/ 11 марта 2019

Как я могу заменить критический раздел вместо omp_locks?

Мой оригинальный код с критическим разделом выглядит примерно так:

#pragma omp for
for (int i = 0; i < n; i++){
    // do thread-safe pre-processing

    #pragma omp critical
    {
        // do critical section stuff
    }
}

Теперь я делаю то же самое, но вместо этого с замками:

omp_lock_t lock;
omp_init_lock(&lock);

#pragma omp for
for (int i = 0; i < n; i++){
    // do thread-safe pre-processing

    omp_set_lock(&lock);

    // do critical section stuff

    omp_unset_lock(&lock);
}
omp_destroy_lock(&lock);

Но по какой-то причине я получаю неправильный результат. Я что-то здесь не так делаю?

Кроме того, когда я пытаюсь использовать несколько блокировок (например, для каждого элемента массива для записи), кажется, что он заходит в тупик?

1 Ответ

1 голос
/ 11 марта 2019

Неосторожная ошибка: определение блокировки должно быть вне параллельного блока

...