Я бы предложил оболочку, которая защищает Hash
с помощью блокировки чтения-записи.Я не смог найти готовую реализацию блокировки чтения-записи Ruby (конечно, пользователи JRuby могут использовать java.util.concurrent.ReentrantReadWriteLock), поэтому я создал ее.Вы можете увидеть это по адресу:
https://github.com/alexdowad/showcase/blob/master/ruby-threads/read_write_lock.rb
Я и два других человека проверили его на МРТ 1.9.2, МРТ 1.9.3 и JRuby.Кажется, он работает правильно (хотя я все еще хочу сделать более тщательное тестирование).Имеет встроенный тестовый скрипт;если у вас многоядерный компьютер, пожалуйста, скачайте, попробуйте запустить его, и дайте мне знать результаты!Что касается производительности, то это мешает Mutex в ситуациях с смещением чтения.Даже в ситуациях с 80-90% операций записи все же кажется немного быстрее, чем при использовании Mutex.
Я также планирую создать порт Ruby для Java ConcurrentHashMap.