8

我知道可以splice从数组中取出一个项目,也可以使用delete. 前一种方法可能会导致并发问题,例如,如果一个线程正在遍历数组,而另一个线程刚刚移动或拼接。delete如果在阵列上使用,则不会出现此问题forEach,因为forEach会越过阵列中的孔。

但是,阵列不能永远保持增长,需要清扫,可能会导致与拼接情况相同的问题。听起来我需要锁定,但如果 Javascript 有任何功能,我会很开心。有什么想法吗?

4

2 回答 2

10

关于您的确切问题:不,您不会遇到并发问题,因为 JavaScript 不是多线程的。即使您使用网络工作者,您也不会遇到任何问题,因为没有共享数据(工作者通过传递消息进行通信)。即使在 node.js 中,您的脚本也不是多线程的。除非您使用await.

所以简单地使用splice,不需要锁定数组。

关于更一般的并发问题,您应该知道,一旦您使用await,执行可以被分成块并且在您等待时可以运行另一个函数。splice永远不会被削减,但当你在一个async函数中时,要小心你的算法对共享数据的逻辑。

于 2013-05-04T16:32:14.327 回答
1

Javascript是单线程的,所以没有问题。

于 2013-05-04T16:32:59.763 回答