我正在编写一个程序,用于生成没有用于模仿读写器问题的线程。一些线程被分配了读者的任务,其中一些是编写器线程。维护了一个数组,以确保为每个循环分配不同的编写器线程迭代。 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)
}
答案 0 :(得分:1)
您的程序不是有效的OpenMP代码。 sections
是一个工作共享构造,因此即使没有足够的部分来提供所有线程(OpenMP Specification,第2.7节),团队中的所有线程都必须遇到它:
团队中的所有线程都必须遇到每个工作共享区域,或者根本不会遇到任何工作共享区域,除非已请求取消最内层的并行区域。
将它放在if
运算符的一个分支中意味着某些线程不会遇到它。实际上,这会导致sections
结构末尾的隐式屏障挂起。我不确定你到底想要实现什么,但代码必须以某种方式重组。