Ruby 是否具有原子变量,例如JavaAtomicInteger
或AtomicBoolean
Java?
问问题
4308 次
5 回答
10
这是一个可以提供您需要的宝石(从此处找到链接)。代码干净紧凑,足以快速理解(它基本上是一个互斥锁,正如其他人所建议的那样),如果您想编写自己的互斥锁包装器,这应该为您提供一个很好的起点。
来自github的一个稍作修改的示例:
require 'atomic'
my_atomic = Atomic.new('')
# set method 1:
my_atomic.update { |v| v + 'hello' }
# set method 2:
begin
my_atomic.try_update { |v| v + 'world' }
rescue Atomic::ConcurrentUpdateError => cue
# deal with it (retry, propagate, etc)
end
# access with:
puts my_atomic.value
于 2012-08-15T16:40:50.347 回答
6
应该注意的是,根据互斥体实现原子类型违背了使用“原子”抽象的目的。
适当的原子实现会发出利用 CPU 的比较和交换指令的代码。
于 2013-01-20T01:15:33.090 回答
2
按照建议使用互斥锁,如下所示:
i = 0
lock = Mutex.new
# Then whenever you want to modify it:
lock.synchronize do
i += 1
end
于 2016-09-30T18:27:31.807 回答
1
我不认为Ruby有一个。但是,有一个Mutex可以用来模仿。
于 2012-08-15T15:43:58.797 回答
1
不是本机的,但您可以使用Mutex
该类获得一些原子性。
AtomicString
例如,您可以实现自己的Mutex
.
于 2012-08-15T15:44:43.790 回答