Ruby には、Javaのような原子変数がありますAtomicInteger
か?AtomicBoolean
4308 次
5 に答える
10
これがあなたが必要とするものを提供するかもしれない宝石です(ここからリンクされています)。コードはクリーンでコンパクトなので、すぐに理解できます(他の人が示唆しているように、基本的にはMutexです)。これは、独自の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
于 2012-08-15T16:40:50.347 に答える
6
ミューテックスの観点からアトミック型を実装すると、「アトミック」抽象化を使用する目的が無効になることに注意してください。
適切なアトミック実装は、CPU のコンペア アンド スワップ命令を利用するコードを発行します。
于 2013-01-20T01:15:33.090 に答える
2
次のように提案されているように Mutex を使用します。
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を模倣するために使用できるMutexがあります。
于 2012-08-15T15:43:58.797 に答える
1
Mutex
ネイティブではありませんが、クラスを使用してある程度の原子性を得ることができます。
AtomicString
たとえば、 を使用して、独自の を実装できますMutex
。
于 2012-08-15T15:44:43.790 に答える