线程安全数组删除

Thread-safe array deletions

本文关键字:删除 数组 安全 线程      更新时间:2023-09-26

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

然而,阵列不能永远保持增长,需要进行扫描,这可能会导致与拼接相同的问题。听起来我需要锁定,但如果Javascript有任何功能的话,我会觉得很有趣。有什么想法吗?

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

因此,只需使用splice,就不需要锁定阵列。

关于更普遍的并发问题,您应该知道,一旦使用await,执行就可以被分块执行,并且在等待时可以运行另一个函数。splice永远不会被剪切,但当您使用async函数时,请注意共享数据算法的逻辑。

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