async.auto中的竞争条件

我正在使用async.each如下所示:

 async.each(students, plan(student, callback), function(err) { ..... ..... }); plan(student, callback){ ...... ...... commonDS[student.id] = student.name; } 

这里commonDS是函数调用的通用数据结构,所以在这里有竞争条件吗?

简短的回答:可能不是。

较长的答案:Node.js是单线程的,所以每个同步代码块都是primefaces的。 特别是没有线程,实际上没有并发(一切顺序运行)。 因此,在同步代码块上没有竞争条件。

虽然总体上存在竞争条件。 例如,假设你有你的commonDS词典。 现在你做一个asynchronous请求来加载数据X ,你做commonDS[key] = X 那么对于那个X你做了另一个asynchronous请求(你加载额外的数据),你做commonDS[key].my_attr = Y 你在这里有比赛条件。 那是因为你不知道你改变了哪个X对象(因为你链接了asynchronous请求)。 您可能会以错误填充的对象结束。

所以为了确保我们需要知道在async.each (或通常在其他地方)中发生了什么。

请注意,Node.js中没有locking对象,所以如果您需要它,您可以自己实现它(不难,因为Node.js是单线程的),或者使用现有的库之一。