openmp程序挂在块的末尾

时间:2017-01-15 04:56:22

标签: c++ multithreading openmp

我正在编写一个程序,用于生成没有用于模仿读写器问题的线程。一些线程被分配了读者的任务,其中一些是编写器线程。维护了一个数组,以确保为每个循环分配不同的编写器线程迭代。 RW是我写的用于读写操作的类。程序工作正常,直到第一次迭代循环结束。但是在并行部分程序结束时程序挂起。

var database = [
  [2, 8, 6],
  [4, 6, 0],
  [5, 2, 3],
  [2, 7, 2]

];

var mainUserRating = database.map(function(v, i) {   //v: element; i: index
  return v.map(function(ele, index) {         // since v itself is an array
    return ele + v[0];            
  });
});

console.log(mainUserRating)

}

1 个答案:

答案 0 :(得分:1)

您的程序不是有效的OpenMP代码。 sections是一个工作共享构造,因此即使没有足够的部分来提供所有线程(OpenMP Specification,第2.7节),团队中的所有线程都必须遇到它:

  

团队中的所有线程都必须遇到每个工作共享区域,或者根本不会遇到任何工作共享区域,除非已请求取消最内层的并行区域。

将它放在if运算符的一个分支中意味着某些线程不会遇到它。实际上,这会导致sections结构末尾的隐式屏障挂起。我不确定你到底想要实现什么,但代码必须以某种方式重组。