作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是将线程对数组的单个元素的访问限制为一次只有一个线程。为此,我使用 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/
我的目标是将线程对数组的单个元素的访问限制为一次只有一个线程。为此,我使用 OpenMP 锁原语。但是,如果 Num_Items 是动态的并且在代码编译之前未知怎么办?看来 omp_lock_t 只接
# include # include # include #define SIZE 10 #define NUM_THREADS SIZE using namespace std; main(
我假设我能够创建 2 个不同的 omp_lock_t,并彼此独立地锁定它们。我用 gcc 4.4 和 gcc 4.6.1 测试了以下代码部分并得到了相同的输出: omp_lock_t lockA; o
我是一名优秀的程序员,十分优秀!