Stack.SyncRoot Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
erişimi Stackeşitlemek için kullanılabilecek bir nesnesi alır.
public:
virtual property System::Object ^ SyncRoot { System::Object ^ get(); };
public virtual object SyncRoot { get; }
member this.SyncRoot : obj
Public Overridable ReadOnly Property SyncRoot As Object
Özellik Değeri
Object erişimi Stackeşitlemek için kullanılabilecek bir .
Uygulamalar
Açıklamalar
öğesinin Stackeşitlenmiş bir sürümünü oluşturmak için yöntemini kullanın Synchronized . Ancak, türetilmiş sınıflar özelliğini kullanarak SyncRoot kendi eşitlenmiş sürümünü Stack sağlayabilir. Eşitleme kodunun doğrudan üzerinde SyncRootStackdeğil üzerinde işlemleri gerçekleştirmesi Stackgerekir. Bu, diğer nesnelerden türetilen toplulukların düzgün çalışmasını sağlar. Özellikle, nesneyi aynı anda değiştirebilecek diğer iş parçacıklarıyla düzgün eşitlemeyi Stack sürdürür.
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 kod örneği, tüm numaralandırma sırasında kullanarak SyncRoot koleksiyonun nasıl kilitlenmesini göstermektedir.
Stack^ myCollection = gcnew Stack();
bool lockTaken = false;
try
{
Monitor::Enter(myCollection->SyncRoot, lockTaken);
for each (Object^ item in myCollection);
{
// Insert your code here.
}
}
finally
{
if (lockTaken)
{
Monitor::Exit(myCollection->SyncRoot);
}
}
Stack myCollection = new Stack();
lock (myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
Dim myCollection As New Stack()
SyncLock myCollection.SyncRoot
For Each item As Object In myCollection
' Insert your code here.
Next item
End SyncLock
Bu özelliğin değerini almak bir O(1)
işlemdir.