线程安全数组删除
Thread-safe array deletions
我知道可以从数组中splice
一个项,也可以用delete
删除它。前一种方法可能会导致并发问题,例如,如果一个线程在数组上遍历,而另一个线程刚刚移位或拼接。如果在阵列上使用forEach
,则delete
不会有此问题,因为forEach
会穿过阵列中的孔。
然而,阵列不能永远保持增长,需要进行扫描,这可能会导致与拼接相同的问题。听起来我需要锁定,但如果Javascript有任何功能的话,我会觉得很有趣。有什么想法吗?
关于你的确切问题:不,你不可能有并发问题,因为JavaScript不是多线程的。即使你使用网络工作者,你也不会有问题,因为没有数据共享(工作者通过传递消息进行通信(。即使在node.js中,您的脚本也不是多线程的。除非使用await
,否则并行执行在函数执行期间不可能执行任何操作。
因此,只需使用splice
,就不需要锁定阵列。
关于更普遍的并发问题,您应该知道,一旦使用await
,执行就可以被分块执行,并且在等待时可以运行另一个函数。splice
永远不会被剪切,但当您使用async
函数时,请注意共享数据算法的逻辑。
Javascript是单线程的,所以没有问题。
相关文章:
- Mongoose-在更新中删除数组元素
- 在特定索引处剥离/删除数组中的值
- Framework7:使用swipeout删除数组中的项
- Javascript删除数组中某个位置之后的项
- 通过选中和取消选中复选框来添加和删除数组中的值
- 编写删除数组并添加到列表的函数
- Javascript - 删除数组中的重复值
- 在 Kineticjs 中删除数组中的组
- 如何根据数组内容添加/删除数组中的元素
- 用于删除数组中的零的Javascript函数代码
- Javascript-仅使用pop()方法删除数组中的负值
- 删除数组元素并将它们添加回原来的位置
- 如果一个键匹配,如何删除数组元素
- 无法使用拼接删除数组中的元素
- 如何从ko.computed中删除数组项
- 删除数组中的重复项,为什么此代码不起作用
- 使用另一个数组按索引删除数组中的对象
- 在 jquery 中,如何通过索引[“键”] 或值删除数组元素
- 使用 Lodash 删除数组中的元素
- 按索引删除数组元素