2012-08-15 6 views

Antwort

9

Here is a gem das könnte liefern, was Sie brauchen (gefunden linked from here). The code is clean and compact enough to quickly understand (es ist im Grunde ein Mutex, wie alle anderen vorgeschlagen haben), der Ihnen einen guten Ausgangspunkt geben sollte, wenn Sie Ihren eigenen Mutex-Wrapper schreiben möchten.

Ein leicht modifiziertes Beispiel von 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

Ich glaube nicht, dass Ruby einen hat. Es gibt jedoch eine Mutex, die Sie verwenden können, um eine nachzuahmen.

1

Nicht nativ, aber Sie können etwas Atomizität mit der Klasse Mutex bekommen.

Sie könnten wahrscheinlich Ihre eigenen AtomicString implementieren, zum Beispiel mit einer Mutex.

3

anzumerken, dass Atomtypen in Bezug auf die mutexes Umsetzung beachtet werden, besiegt den Zweck der Verwendung der ‚atomaren‘ Abstraktion.

Korrekte atomare Implementierungen emittieren Code, der die Compare-and-Swap-Anweisung der CPU nutzt.

2

Verwenden Mutex als wie so vorgeschlagen:

i = 0 
lock = Mutex.new 

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