8
votes

Écrire une opération atomique

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


1 commentaires

5 Réponses :


7
votes

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.

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 )


1 commentaires

Découvrez également le Monitor et Monitormixin Les classes faisant partie des bibliothèques standard Ruby.



6
votes

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 méthodes de activeCord . xxx

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.


0 commentaires

2
votes

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).

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.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

- Sai Venkat


1 commentaires

+1 pour STM étant ce que l'OP a besoin. N'a pas essayé la bibliothèque cependant.



0
votes

Avez-vous consulté la «transaction» Simple 'Gem?

Je pense que cela conviendrait à votre but

http://rubyforge.org/projects/trans-simple


0 commentaires

6
votes

La classe Mutex est disponible dans la version 1.9 (et nécessite ("thread") in 1.8) et vous permet de verrouiller les opérations dans un contexte. XXX

Cela vous garantira que le bloc donné à Mutex # Synchronize est exécuté séquentiellement.

Doc officiel est ici: http://rubydoc.info/stdlib/core/1.9.2/mutex


0 commentaires