gpt4 book ai didi

c - OpenMP:omp_lock_t 中的动态大小数组?

转载 作者:行者123 更新时间:2023-11-30 19:26:18 24 4
gpt4 key购买 nike

我的目标是将线程对数组的单个元素的访问限制为一次只有一个线程。为此,我使用 OpenMP 锁原语。但是,如果 Num_Items 是动态的并且在代码编译之前未知怎么办?看来 omp_lock_t 只接受静态大小的数组作为输入。

#include <stdio.h>
#include <omp.h>

int main(int argc, char **argv)
{
int Num_Items = 50; //array size
int array[Num_Items];
omp_lock_t lock[Num_Items];
int val, item, i;

// initialize locks
for (i=0; i<Num_Items; i++)
omp_init_lock(&(lock[i]));

#pragma omp parallel for default(none) private(i, val, item) shared(array, lock, Num_Items)
for (i=0; i<Num_Items; i++) {
val= omp_get_thread_num();
item = (i * 10) % Num_Items ;

omp_set_lock(&(lock[item]));
array[item] = val; // only one thread has access to array[item]
omp_unset_lock(&(lock[item]));
}

// print array[]
for (i=0; i<Num_Items ; i++)
printf("array[%i] = %i \n", i, array[i]);

// destroy locks
for (i=0; i<Num_Items ; i++)
omp_destroy_lock(&(lock[i]));


return 0;
}

最佳答案

我们可以分配一个大小为 omp_lock_t 的动态大小的数组,以防在代码编译之前项目数量未知:

omp_lock_t *lock = (omp_lock_t *)malloc(Num_Items*sizeof(omp_lock_t));

关于c - OpenMP:omp_lock_t 中的动态大小数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com