Безопасно ли для потоков разделять Ruby Hash между потоками и изменять его в каждом потоке, имея гарантию , каждый поток изменяет разные ключи (добавляет новый хеш с неопределенным, до выполнения, количеством ключей к нему)?
Я знаю, что это не безопасно для потоков, если потоки изменяют один и тот же ключ, однако я не уверен, безопасно ли, если они изменяют разные ключи.
например. ниже приведен пример программы, которая может проиллюстрировать проблему:
#!/usr/bin/env ruby
# frozen_string_literal: true
array = [*1..100]
hash = {}
array.each do |element|
hash[element] = {}
end
threads = []
array.each do |element|
threads << Thread.new do
random = rand(1..100)
hash_new_keys = [*0..random]
hash[element] = {}
hash_new_keys.each do |key|
hash[element][key] = rand(1..10)
end
end
end
threads.each(&:join)