0

我有一个包含 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 循环的方式。1. 我将一个数组分成 10 个切片 2. 创建 4 个异步进程来执行 for 循环的前四个切片。这是我的问题 3。我想实现一种机制,其中 4 个异步进程将在前四个数组切片上运行,谁在比赛中首先完成将选择第 5 项,接下来将选择第 6 项。这意味着选择仍待处理的项目。

在这里,我面临一个挑战,即如果两个进程同时完成,则两者都将执行相同的待处理项目,因为当时状态为待处理。

你能给我一个实施这个的想法吗?

4

1 回答 1

1

使用信号量来保护您的待处理列表。任何时候只有一个进程可以拥有信号量,所以持有信号量的进程可以安全地接触到待处理列表。

于 2013-08-09T05:02:18.600 回答