2012-08-15 20 views

Odpowiedz

9

Here is a gem, które mogą zapewnić to, czego potrzebujesz (znaleziono linked from here). The code is clean and compact enough to quickly understand (jest to w zasadzie Mutex, jak sugerowali wszyscy inni), co powinno dać dobry punkt wyjścia, jeśli chcesz napisać własne opakowanie Mutex.

Lekko zmodyfikowany przykład z 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

Nie sądzę, że Ruby ma jeden. Istnieje jednak jeden model, którego można naśladować.

1

Nie, ale można uzyskać pewną atomowość przy użyciu klasy Mutex.

Prawdopodobnie możesz zaimplementować własny AtomicString, na przykład używając Mutex.

3

Należy zauważyć, że wprowadzenie rodzaju atomowej w zakresie muteksy celowość stosowania określenia „atomową” abstrakcji.

Odpowiednie implementacje atomowe emitują kod, który wykorzystuje instrukcje porównania i wymiany procesora.

2

Zastosowanie Mutex jak sugeruje tak:

i = 0 
lock = Mutex.new 

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