gpt4 book ai didi

arrays - 多线程 + Ruby 数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:14:23 25 4
gpt4 key购买 nike

我很难理解在多线程的 Ruby 中插入数组是否安全。

据我了解,Ruby 数组与任何其他对象一样不是线程安全的。但这是否意味着插入数组也不安全?

例如,我有以下代码:

arr=[]
threads = []

for i in 1..5
threads << Thread.new do
for j in 1..1000
arr << ((1000 * i) + j)
end
end
end

threads.each(&:join)

puts arr.length

它只是旋转 5 个线程,每个线程将 1000 个数字推送到一个数组。看起来结果总是一致的,我总是得到数组中 5000 个元素的结果。

那么这样做安全吗?

最佳答案

As far as I understand Ruby arrays, just like any other objects are not thread safe. But does it mean that insertion to array is also not safe?

没错。数组插入在 Ruby 上并不安全,但如果你在 MRI 中运行你的代码,它每次都会工作,因为 GIL。 GIL(全局解释器锁)旨在防止此类问题,但 JRuby 和 Rubinius 没有 GIL 并且按您预期的方式工作(有时产生 5000,有时更少)。

这是因为使用 GIL 时只有一个线程处于事件状态,因此向数组添加元素没有问题。

阅读this .

关于arrays - 多线程 + Ruby 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40849603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com