Queue.SyncRoot Propiedad
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Obtiene un objeto que se puede usar para sincronizar el acceso a Queue.
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
Valor de propiedad
Un objeto que se puede usar para sincronizar el acceso a la clase Queue.
Implementaciones
Ejemplos
En el ejemplo de código siguiente se muestra cómo bloquear la colección mediante durante SyncRoot toda la enumeración. Recuperar el valor de esta propiedad es una O(1)
operación.
Queue^ myCollection = gcnew Queue();
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);
}
}
Queue myCollection = new Queue();
lock (myCollection.SyncRoot)
{
foreach (object item in myCollection)
{
// Insert your code here.
}
}
Dim myCollection As New Queue()
SyncLock myCollection.SyncRoot
For Each item In myCollection
' Insert your code here.
Next item
End SyncLock
Comentarios
Para crear una versión sincronizada de Queue, use el Synchronized método . Sin embargo, las clases derivadas pueden proporcionar su propia versión sincronizada de Queue mediante la SyncRoot propiedad . El código de sincronización debe realizar operaciones en de SyncRoot , Queueno directamente en .Queue De este modo, se garantiza el funcionamiento correcto de las colecciones derivadas de otros objetos. En concreto, mantiene la sincronización adecuada con otros subprocesos que podrían modificar simultáneamente el Queue objeto.
Enumerar una colección no es intrínsecamente un procedimiento seguro para subprocesos. Incluso cuando una colección está sincronizada, otros subprocesos todavía pueden modificarla, lo que hace que el enumerador produzca una excepción. Con el fin de garantizar la seguridad para la ejecución de subprocesos durante la enumeración, se puede bloquear la colección durante toda la enumeración o detectar las excepciones resultantes de los cambios realizados por otros subprocesos.