Ich würde einen Wrapper vorschlagen, der die Hash
mit einer Lese- und Schreibsperre. Ich konnte keine vorgefertigte Ruby-Implementierung einer Lese- und Schreibsperre finden (JRuby-Benutzer können natürlich java.util.concurrent.ReentrantReadWriteLock verwenden), also habe ich eine gebaut. Sie können sie sehen unter:
https://github.com/alexdowad/showcase/blob/master/ruby-threads/read_write_lock.rb
Ich und zwei andere Leute haben es auf MRI 1.9.2, MRI 1.9.3 und JRuby getestet. Es scheint korrekt zu funktionieren (obwohl ich noch gründlichere Tests durchführen möchte). Es hat ein eingebautes Testskript; wenn Sie eine Multi-Core-Maschine haben, laden Sie es bitte herunter, versuchen Sie, es auszuführen, und lassen Sie mich die Ergebnisse wissen! Was die Leistung anbelangt, so übertrifft es Mutex in Situationen mit einem Lesefehler. Selbst in Situationen mit 80-90% Schreibzugriff ist es immer noch scheint ein wenig schneller zu sein als die Verwendung einer Mutex.
Ich habe auch vor, eine Ruby-Portierung von Java's ConcurrentHashMap zu machen.