2012-08-15 42 views

回答

9

Here is a gem可能会提供你所需要的(找到linked from here)。 The code is clean and compact enough to quickly understand(它基本上是一个Mutex,正如其他人所建议的那样),如果你想编写你自己的互斥包装器,它应该给你一个很好的起点。

甲轻轻改性从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 
1

我不认为Ruby有一个。但是,您可以使用模拟一个Mutex

1

不是原生的,但可以使用Mutex类获得一些原子性。

您可以实现自己的AtomicString,例如,使用Mutex

3

应当指出的是,在互斥的方面实现原子类型击败使用“原子”的抽象的目的。

正确的原子实现发出利用CPU的比较和交换指令的代码。

2

使用互斥的建议,像这样:

i = 0 
lock = Mutex.new 

# Then whenever you want to modify it: 
lock.synchronize do 
    i += 1 
end 
相关问题