Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14222|Yanıt: 0

[İletişim] Java ve I++ iş parçacığı güvenliğinin temel türlerine dair içgörü

[Bağlantıyı kopyala]
Yayınlandı 5.04.2015 22:17:45 | | |

Java'da diğer temel değişkenler atomiktir, ancak Long ve Double'ın 8 bayt, 64 bitlik değişkenleri hariç.


Java depolama modeli, hem get hem de store işlemlerinin atomik olmasını gerektirir, ancak değişken olmayan uzun ve çift değişkenler için JVM, 64 bitlik okuma veya yazma işlemlerini iki 32 bitlik operasyona ayırmaya olanak tanır.

Okuma ve yazma işlemleri farklı iş parçacıklarında gerçekleşiyorsa, uçucu olmayan tip uzun bir uzun okumak bir değerin yüksek 32 biti ve diğerinin düşük 32 biti ile sonuçlanabilir.

Yani süresi dolmuş verilerle ilgilenmiyorsanız bile, çok iş parçacıklı bir programda paylaşılan, değiştirilebilir uzun ve çift değişkenleri kullanmak güvenli olmayabilir, ancak bunlar değişken ilan edilmedikçe veya kilitle korunmuyorsa.


Atomik işlemlerden bahsetmişken, okuma ve yazmanın atomik olduğu anlamına gelir, örneğin i=5; Bu atomik bir işlemdir.

Ancak, iki atomun işlemi birlikte yapılırsa, bu mutlaka atomik değildir; örneğin önce okuyup sonra yazmak gibi, o zaman değişken okunduktan sonra değiştirilmiş olabilir.

i++ böyle bir işlemdir, önce okunur ve sonra yazılır, yani tam sayı değişkeni atomiktir, i++ atomik işlem değildir.

for(int i=0; i<10000; i++){System.out.print(i)}

Sonunda 10.000 basmayacağımı ve yaklaşık 8-9 bin baskı yapacağımı göreceksiniz.


Ancak çoklu iş parçacığı durumunda, tam sayı değişkeni atomik olsa bile, iş parçacığı güvenlik sorunları olabilir, bu da iş parçacığı görünürlüğü sorunudur, bu yüzden değişken bir ifade eklemeniz gerekir.

Bu modifiyetör, her seferinde bellekten okunan ve kayıtlarda saklanmayan zorunlu bir değişkendir.




Önceki:SQL 2008 hata mesajı ile uyarır (sağlayıcı: SQL Network Interfaces, hata: 25 - Bağlantı kelimesi).
Önümüzdeki:[Fast and Furious 7] 2.12G DVD'yi ilk kez tanıtıyor İnternetteki en net versiyon
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com