SORU
1 NİSAN 2009, ÇARŞAMBA


Neden Listesi<T> iş parçacığı için güvenli değil mi?

bu siteden:

http://crfdesign.net/programming/top-10-differences-between-java-and-c

Ne yazık ki, Liste<>değil evresel (C#’ın ArrayList ve Java Vektör iş parçacığı güvenli). C# da var Karma tablosu; genel sürüm değil

ne yapar List<T> güvenli iş parçacığı değil mi? sorun uygulamasıdır .net çerçeve mühendis bölümü? ya jenerik thread-safe değil mi?

CEVAP
1 NİSAN 2009, ÇARŞAMBA


Gerçekten iş parçacığı güvenliği Java Vektör türünü sınıflandırmak gerekir. Javas Vektör yöntemleri eşitleme kullandığı için güvenli birden çok iş parçacığı tarafından kullanılır. Devlet bozuk olmayacaktır.

Ancak, Java vektör ikilinin ek senkronizasyon olmadan birden çok iş parçacığı sayısı sınırlıdır. Örneğin, bir vektör bir öğe okuma basit hareket düşünün

Vector vector = getVector();
if ( vector.size() > 0 ) { 
  object first = vector.get(0);
}

Bu yöntem vektör durumu bozuk olmaz, ama bu da doğru değil. Eğer deyimi bir şey vektör arasındaki mutasyona başka bir iş parçacığı kimse engel olamaz() arayın. Bu kod olabilirsonunda bir yarış durumu nedeniyle başarısız.

Senkronizasyon bu tür senaryoları bir avuç sadece yararlıdır ve kesinlikle ucuz değil. Eğer birden çok iş parçacığı kullanmasanız bile senkronizasyon için yüksek bir fiyat ödemek.

.Net sadece sınırlı yararlı bir senaryo için varsayılan olarak bu fiyatı ödemek için seçtim. Bunun yerine kilit ücretsiz bir Liste uygulamak için seçti. Yazarlar sorumlu herhangi bir eşitleme ekliyoruz. C daha doğru olacaktır 'nin modeli "ne için sadece ödeme"

Geçenlerde Java vektör gibi iç eşitleme sadece koleksiyonları kullanmanın tehlikeleri hakkında birkaç makale yazdı.

Başvuru Vektör iş parçacığı güvenliği: http://www.ibm.com/developerworks/java/library/j-jtp09263.html

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • infodirt

    infodirt

    11 Mart 2009
  • Kindness

    Kindness

    23 Ocak 2006
  • RyanXLT

    RyanXLT

    22 Ocak 2011