Je voudrais exécuter des méthodes atomicité avec Ruby, selon http: // fr. wikipedia.org/wiki/atomicity_(Database_systems)
Par exemple, si j'ai: P>
atomic_operation do a += 10 b -= 39 end
5 Réponses :
Cela dépend vraiment de la portée auxquelles vous êtes intéressé par les bons outils du travail. Si vous souhaitez effectuer une opération atomique sur une base de données, le pilote de base de données (si c'est une bonne / la base de données la prend en charge) offre un moyen d'utiliser une transaction de base de données pour effectuer des mises à jour atomiques. P>
Si vous parlez d'une application de rubis multi-threadé tente de rendre les mises à jour des ressources partagées atomiques et sécuritaires, alors Ruby fournit les classes de mutex et conditionnelles pour vous aider à sortir à cet égard. (Plus d'infos: http://ruby-doc.org/docs/programmingRuby/html /Teut_threads.html ) P>
Découvrez également le Monitor CODE> et
Monitormixin CODE> Les classes faisant partie des bibliothèques standard Ruby.
Comme vous le pointez sur un article sur les bases de données, je suppose que vous demandez dans ce contexte.
Si vous utilisez des rails, vous utilisez la transaction Si vous utilisez en dehors des rails, vous devez travailler avec quelle base de données la bibliothèque de pilotes fournit. Vérifiez le Implémentation de la transaction sur rails pour obtenir une idée de la façon dont cela peut être fait. p> p> code> méthodes de activeCord . P>
Qu'est-ce dont vous avez besoin que mon ami est une mémoire transactionnelle logicielle. Essayez la mise en œuvre de la STM que j'ai joué avec Jruby (vous devez vérifier le code dans Repo car je ne l'ai pas emballé pour la libération). p>
Découvrez également Ruby Atomic, je travaille sur http://github.com/saivenkat/ruby- atomique . Vous donne le type d'opérations CAS sur IRM. Ceci est un niveau inférieur, mais vous aidera avec le même problème. Je n'ai pas écrit de mémoire transactionnelle pour IRM One, mais avec l'infrastructure CAS, il ne sera pas long :) p>
P.S Stackoverflow ne me permet pas de poster plus d'un lien car je n'ai pas beaucoup utilisé son système. Alors Checkout le site multivers dans Codehaus pour STM à Jruby P>
- Sai Venkat P>
+1 pour STM étant ce que l'OP a besoin. N'a pas essayé la bibliothèque cependant.
Avez-vous consulté la «transaction» Simple 'Gem? P>
Je pense que cela conviendrait à votre but p>
La classe Mutex est disponible dans la version 1.9 (et Cela vous garantira que le bloc donné à Mutex # Synchronize est exécuté séquentiellement. P> Doc officiel est ici: http://rubydoc.info/stdlib/core/1.9.2/mutex p> p> nécessite ("thread") code> in 1.8) et vous permet de verrouiller les opérations dans un contexte.
Jetez un coup d'œil à github.com/head/Ruby-atomic et à l'intérieur pragprrog.com/book/jsthreads/working-with-Ruby-threads