Ruby 编写原子操作
我想用Ruby执行一些原子性方法,根据 例如,如果我有:Ruby 编写原子操作,ruby,transactions,atomic,ruby-1.9,atomicity,Ruby,Transactions,Atomic,Ruby 1.9,Atomicity,我想用Ruby执行一些原子性方法,根据 例如,如果我有: a = 30 b = 75 我希望能够做到以下几点: atomic_operation do a += 10 b -= 39 end Ruby 1.9中是否有一个本机模块允许这样的过程?如果可能的话,我想不使用插件就这样做。非常感谢 这实际上取决于您感兴趣的范围,以及适合该工作的工具。如果您希望在数据库上执行原子操作,那么数据库驱动程序可能会(如果它很好/数据库支持它)提供一种使用数据库事务使更新原子化的方法 如果您谈论的是一
a = 30
b = 75
我希望能够做到以下几点:
atomic_operation do
a += 10
b -= 39
end
Ruby 1.9中是否有一个本机模块允许这样的过程?如果可能的话,我想不使用插件就这样做。非常感谢 这实际上取决于您感兴趣的范围,以及适合该工作的工具。如果您希望在数据库上执行原子操作,那么数据库驱动程序可能会(如果它很好/数据库支持它)提供一种使用数据库事务使更新原子化的方法 如果您谈论的是一个多线程Ruby应用程序,它试图对共享资源进行原子和线程安全的更新,那么Ruby提供了互斥和条件变量类来帮助您解决这一问题。
(更多信息:)当你指着一篇关于数据库的文章时,我猜你是在问这个问题 如果您使用的是Rails,则使用的
事务
如果在Rails之外使用,则必须使用数据库驱动程序库提供的内容。查看Rails,了解如何实现它。我的朋友,你需要的是软件事务内存。尝试我在JRuby中使用的STM实现(您需要在repo中签出代码,因为我还没有将其打包到发行版中) 还可以查看我正在开发的Ruby atomic。为您提供MRI上的CAS操作类型。这是一个较低的级别,但会帮助您解决相同的问题。我还没有为MRI one编写事务性内存,但使用CAS基础架构不会太长:) p.S Stackoverflow不允许我发布多个链接,因为我没有经常使用它的系统。因此,在JRuby中的STM中检查codehaus中的多重宇宙站点
--Sai Venkat你看过“交易简单”的宝石吗 我想那会符合你的目的
互斥类在1.9运行时(和1.8中的
require('thread')
)中可用,并允许您在上下文中锁定操作
# Typically defined in the object initializer
@lock = Mutex.new
# Then in your code
@lock.synchronize do
a += 10
b -= 39
end
这将保证指定给互斥同步的块按顺序运行
官方文件在这里:+1,因为STM是OP需要的。不过,我还没有尝试过这个库。还可以查看Ruby标准库中的
Monitor
和MonitorMixin
类
# Typically defined in the object initializer
@lock = Mutex.new
# Then in your code
@lock.synchronize do
a += 10
b -= 39
end