SchemaNameCollection.ICollection.SyncRoot Özellik

Tanım

erişimi ICollectioneşitlemek için kullanılabilecek bir nesnesi alır.

property System::Object ^ System::Collections::ICollection::SyncRoot { System::Object ^ get(); };
object System.Collections.ICollection.SyncRoot { get; }
member this.System.Collections.ICollection.SyncRoot : obj
 ReadOnly Property SyncRoot As Object Implements ICollection.SyncRoot

Özellik Değeri

erişimi ICollectioneşitlemek için kullanılabilecek bir nesne.

Uygulamalar

Açıklamalar

Temel alınan depoya sahip koleksiyonlar genel kullanıma açık değilse beklenen uygulama geçerli örneği döndürmektir. Geçerli örneğin işaretçisinin diğer koleksiyonları sarmalayan koleksiyonlar için yeterli olmayabileceğini unutmayın; bunlar temel koleksiyonun SyncRoot özelliğini döndürmelidir.

Ad alanında çoğu koleksiyon sınıfı, temel koleksiyonun System.Collections çevresinde eşitlenmiş bir sarmalayıcı sağlayan bir yöntem de uygular Synchronized . Ancak türetilmiş sınıflar, özelliğini kullanarak SyncRoot koleksiyonun kendi eşitlenmiş sürümlerini sağlayabilir. Eşitleme kodu, doğrudan koleksiyon üzerinde SyncRoot değil, koleksiyonun üzerinde işlemler gerçekleştirmelidir. Bu, diğer nesnelerden türetilen toplulukların düzgün çalışmasını sağlar. Özellikle, koleksiyon örneğini aynı anda değiştirebilecek diğer iş parçacıklarıyla düzgün eşitlemeyi sürdürür.

Bir koleksiyonda yöntem olmadığında Synchronized için beklenen kullanım SyncRoot şöyle görünür:

ICollection MyCollection =...  
 lock(MyCollection.SyncRoot) {  
  // Some operation on the collection, which is now thread safe.  
 }  
Dim myCollection as New ICollection()  
 SyncLock myCollection.SyncRoot  
  ' Some operation on the collection, which is now thread safe.  
 End SyncLock  

Bir koleksiyon ile numaralandırma, aslında iş parçacığı açısından güvenli yordam değildir. Bir koleksiyon eşitlendiği zaman bile, diğer iş parçacıkları numaralandırıcının özel durum oluşturmasına neden olan koleksiyonu değiştirebilir. Numaralandırma sırasında iş parçacığı güvenliği sağlamak için tüm numaralandırma sırasında koleksiyonu kilitleyebilir veya diğer iş parçacıkları tarafından yapılan değişikliklerden kaynaklanan özel durumları yakalayabilirsiniz.

Aşağıdaki örnekte, tüm numaralandırma sırasında kullanarak SyncRoot koleksiyonun nasıl kilitlenmesi gösterilmektedir:

ICollection myCollection = new ICollection();  
 lock(myCollection.SyncRoot) {  
  foreach (Object item in myCollection) {  
  // Insert your code here.  
  }  
 }  
Dim myCollection As New ICollection()  
 Dim item As Object  
 SyncLock myCollection.SyncRoot  
  For Each item In myCollection  
  ' Insert your code here.  
  Next item  
 End SyncLock  

Şunlara uygulanır

Ayrıca bkz.