AtomicInteger senkronizasyonu işliyor mu?

Aug 17 2020

İki iş parçacığı da i ++int i kullanarak aynı artarsa , i ++ atomik işlem olmadığı için bir sorunla karşılaşabiliriz . İşte bu yüzden AtomicInteger.increment(), artan atomik yapan vardır . Yani, eğer 1 çekirdek ve 2 iş parçacığımız olsaydı .increment(), kesinlikle bir sorun olmazdı (çünkü işlemin ortasında askıya alınamaz).

Ama ya 2 çekirdeğimiz ve 2 iş parçacığımız olsaydı ve onlar paralel olarak (tam olarak aynı anda) buna derlerse increment()?

İle aynı değeri yükleme olasılıkları olabilir int imi? Yani 1 olsaydı int i, sonuç 3 değil 2 olurdu . Bu durumda atomik işlem olup olmadığı umurumuzda değil çünkü ikisi de aynı anda aynı değeri alıyorlar ..

Alt satır: senkronizasyon AtomicInteger tarafından mı işleniyor?

Yanıtlar

3 Joni Aug 17 2020 at 12:04

İle aynı değeri yükleme olasılıkları olabilir int imi?

Evet var, ama senin için halledildi.

incrementAndGetYöntem setleri artırılır değeri o bir atom "karşılaştırarak kümesi" operasyonu kullanan ancak yalnızca yeni bir değer zaten ayarlanmış olmasaydı . Karşılaştırma başarısız olursa, incrementAndGetyeni değeri getirir ve tekrar dener.

Net etki, incrementAndGetbirden fazla iş parçacığından kullanımın güvenlidir .