Ruby有原子变量吗?

mic*_*hal 15 ruby

请问红宝石有原子变量,如AtomicIntegerAtomicBooleanJava中?

小智 9

这是一个宝石,可能提供你需要的东西(从这里链接).代码干净而紧凑,足以快速理解(它基本上是一个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
Run Code Online (Sandbox Code Playgroud)


vem*_*emv 5

应该注意的是,根据互斥体实现原子类型违背了使用“原子”抽象的目的。

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