2012-08-15 13 views

Respuesta

9

Here is a gem que podrían proporcionarle lo que necesita (encontrado linked from here). The code is clean and compact enough to quickly understand (es básicamente un Mutex, como todos han sugerido), que debería darle un buen punto de partida si quiere escribir su propio envoltorio Mutex.

Un ejemplo ligeramente modificado a partir de 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

No creo que Ruby tenga una. Sin embargo, hay un Mutex que puede usar para imitar uno.

1

No nativo, pero puede obtener un poco de atomicidad con la clase Mutex.

Probablemente podría implementar su propio AtomicString, por ejemplo, usando un Mutex.

3

Cabe señalar que la aplicación de tipos atómicos en términos de mutex en contra del propósito de la utilización de la abstracción 'atómica'.

Las implementaciones atómicas adecuadas emiten código que aprovecha las instrucciones de comparación y cambio de la CPU.

2

Uso objeto mutex como sugiere este modo:

i = 0 
lock = Mutex.new 

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