使用带有 c++ openmp 的自旋锁
Using a spinlock with c++ openmp
我用唯一的锁和一个条件变量实现了这种方法。它将元素添加到数组中,但前提是数组未满。如果已满,它将等待其他线程取出一个元素,然后才将新元素放入。
void Filter::put(Person person)
{
std::unique_lock<std::mutex> guard(lock);
cv.wait(guard, [&] { return !full; });
container[count] = person;
count++;
empty = false;
if (count == 10)
full = true;
cv.notify_all();
}
我的目标是使用 OpenMP 编写相同的方法。如果我理解正确,#pragma omp critical (name)
应该执行与唯一锁相同的操作。但是,我不确定我应该如何处理旋转锁。
好吧,如果有人感兴趣,这是我经过一些试验和错误后想出的解决方案,它似乎工作正常。
void Filter::put(Person person)
{
while (full || omp_test_lock(&spinlock) == 0)
{
}
container[count] = person;
count++;
empty = false;
if (count == 10)
full = true;
omp_unset_lock(&spinlock);
}
相关文章:
- OpenMP阵列性能较差
- OpenMP卸载说'fatal error: could not find accel/nvptx-none/mkoffload'
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 从python调用openMP共享库时,未定义opnMP函数
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 查找最近配对时的OpenMP竞赛条件
- 使用输入打破 OpenMP 中的循环
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 在 openmp 中,omp_get_thread_num是否绑定到物理线程?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- OpenMP 加上unordered_map<字符串、双字符串的缩减>
- OpenMP 与有序和关键指令并行
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- OpenMP for 循环并行性问题
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 读取文件时无法使用 OpenMP 获得加速