我有一个包含5000个元素的数组,我正在以下面的方式执行它
var arr = [..] // 5000 elements array
split = 10;
arr.split(split);
function asyncForLoop(){
// It takes advantage of Web workers and execute for loop
}
var pending = new Array(split), data = [];
for(var i = 0, l = 4; i++){
(function(a){
data[i] = new asyncForLoop(a, function(){
});
})(arr[i]);
pending.shift();
}
这是我执行for循环的方式。 我正在将一个数组分成10个切片 2.创建4个异步进程以执行前四个for循环切片。 这是我的问题 3.我想实现一种机制,其中4个异步进程将在前四个数组切片上运行,无论谁在比赛中首先完成将选择第5项,接下来将选择第6项。这意味着选择待处理的项目。
在这里,我面临的挑战是,如果两个进程同时完成,两个进程都会执行相同的待处理项目,因为当时状态将处于待处理状态。
你能不能给我一个实现这个的想法。?
答案 0 :(得分:1)
使用信号量保护待处理列表。任何时候只有一个进程可以拥有信号量,因此持有信号量的进程可以安全地触及挂起的列表。