Как я могу заменить критический раздел вместо 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);
Но по какой-то причине я получаю неправильный результат. Я что-то здесь не так делаю?
Кроме того, когда я пытаюсь использовать несколько блокировок (например, для каждого элемента массива для записи), кажется, что он заходит в тупик?