簡體   English   中英

Ruby有原子變量嗎?

[英]Does Ruby have atomic variables?

Ruby有原子變量,比如Java中的AtomicIntegerAtomicBoolean嗎?

這是一個寶石 ,可能提供你需要的東西( 從這里鏈接 )。 代碼干凈而緊湊,足以快速理解 (它基本上是一個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

應該注意的是,根據互斥體實現原子類型會破壞使用“原子”抽象的目的。

適當的原子實現會發出利用CPU的比較和交換指令的代碼。

按照建議使用Mutex,如下所示:

i = 0
lock = Mutex.new

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

我不認為Ruby有一個。 但是,有一個Mutex可以用來模仿一個。

不是本地的,但你可以使用Mutex類獲得一些原子性。

您可以實現自己的AtomicString ,例如,使用Mutex

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM