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
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
Neden bir dize ile gidiş-dönüş dönüştü...
Neden bu sınıfı, iş parçacığı güvenli ...
Neden-exec mv bulmak için {} ./hedef/ ...
Neden listesi't güvenli "al&...
Bu iş Parçacığı için Güvenli değil mi?...