AbandonedMutexException Clase
TOC
Collapse the table of content
Expand the table of content
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

AbandonedMutexException (Clase)

 

La excepción que se produce cuando un subproceso adquiere un Mutex objeto que otro subproceso ha abandonado al salir sin liberarlo.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.Threading.AbandonedMutexException

<SerializableAttribute>
<ComVisibleAttribute(False)>
Public Class AbandonedMutexException
	Inherits SystemException

NombreDescripción
System_CAPS_pubmethodAbandonedMutexException()

Inicializa una nueva instancia de la clase AbandonedMutexException con valores predeterminados.

System_CAPS_pubmethodAbandonedMutexException(Int32, WaitHandle)

Inicializa una nueva instancia de la AbandonedMutexException clase con el índice especificado de la exclusión mutua abandonada, si es aplicable y un Mutex objeto que representa la exclusión mutua.

System_CAPS_protmethodAbandonedMutexException(SerializationInfo, StreamingContext)

Inicializa una nueva instancia de la clase AbandonedMutexException con datos serializados.

System_CAPS_pubmethodAbandonedMutexException(String)

Inicializa una nueva instancia de la clase AbandonedMutexException con el mensaje de error especificado.

System_CAPS_pubmethodAbandonedMutexException(String, Exception)

Inicializa una nueva instancia de la AbandonedMutexException clase con una error especificado mensaje y la excepción interna.

System_CAPS_pubmethodAbandonedMutexException(String, Exception, Int32, WaitHandle)

Inicializa una nueva instancia de la AbandonedMutexException clase con un mensaje de error especificado, la excepción interna, el índice de la exclusión mutua abandonada, si es aplicable y un Mutex objeto que representa la exclusión mutua.

System_CAPS_pubmethodAbandonedMutexException(String, Int32, WaitHandle)

Inicializa una nueva instancia de la AbandonedMutexException de mensaje de clase con un error especificado, el índice de la exclusión mutua abandonada, si es aplicable y la exclusión mutua abandonada.

NombreDescripción
System_CAPS_pubpropertyData

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.(Heredado de Exception.)

System_CAPS_pubpropertyHelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.(Heredado de Exception.)

System_CAPS_pubpropertyHResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.(Heredado de Exception.)

System_CAPS_pubpropertyInnerException

Obtiene la instancia Exception que produjo la excepción actual.(Heredado de Exception.)

System_CAPS_pubpropertyMessage

Obtiene un mensaje que describe la excepción actual.(Heredado de Exception.)

System_CAPS_pubpropertyMutex

Obtiene la exclusión mutua abandonada que produjo la excepción, si se conoce.

System_CAPS_pubpropertyMutexIndex

Obtiene el índice de la exclusión mutua abandonada que produjo la excepción, si se conoce.

System_CAPS_pubpropertySource

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.(Heredado de Exception.)

System_CAPS_pubpropertyStackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.(Heredado de Exception.)

System_CAPS_pubpropertyTargetSite

Obtiene el método que produjo la excepción actual.(Heredado de Exception.)

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object.)

System_CAPS_protmethodFinalize()

Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por el recolector de basura. (Heredado de Object.)

System_CAPS_pubmethodGetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.(Heredado de Exception.)

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.(Heredado de Exception.)

System_CAPS_pubmethodGetType()

Obtiene el tipo en tiempo de ejecución de la instancia actual.(Heredado de Exception.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficial del Object actual.(Heredado de Object.)

System_CAPS_pubmethodToString()

Crea y devuelve una representación de cadena de la excepción actual.(Heredado de Exception.)

NombreDescripción
System_CAPS_proteventSerializeObjectState

Ocurre cuando una excepción se serializa para crear un objeto de estado de excepción que contenga datos serializados sobre la excepción.(Heredado de Exception.)

Cuando un subproceso abandona una exclusión mutua, la excepción se produce en el subproceso siguiente que adquiere la exclusión mutua. El subproceso podría adquirir la exclusión mutua porque ya estaba esperando en la exclusión mutua o porque ha entrado en un momento posterior.

Un mutex abandonado indica un error de programación grave. Cuando un subproceso sale sin liberar el mutex, las estructuras de datos protegidas por el mutex no estén en un estado coherente. Antes de la versión 2.0 de .NET Framework, era difíciles de detectar porque se inició ninguna excepción si una espera finalizada como resultado de un mutex abandonado tales problemas. Para obtener más información, vea la clase Mutex.

El siguiente subproceso que solicita la propiedad de la exclusión mutua puede controlar esta excepción y continuar, siempre que se puede comprobar la integridad de las estructuras de datos.

En el ejemplo de código siguiente se ejecuta un subproceso que abandona cinco exclusiones mutuas, mostrando sus efectos en el WaitOne, WaitAny, y WaitAll métodos. El valor de la MutexIndex propiedad se muestra para el WaitAny llamar.

System_CAPS_noteNota

La llamada a la WaitAny es una de las exclusiones mutuas abandonadas interrumpe (método). La exclusión mutua abandonada aún puede provocar un AbandonedMutexException para producir los métodos de espera subsiguientes.

Option Explicit
Imports System
Imports System.Threading

Public Class Example
    Private Shared _dummy As New ManualResetEvent(False)

    Private Shared _orphan1 As New Mutex()
    Private Shared _orphan2 As New Mutex()
    Private Shared _orphan3 As New Mutex()
    Private Shared _orphan4 As New Mutex()
    Private Shared _orphan5 As New Mutex()

    <MTAThread> _
    Public Shared Sub Main()
        ' Start a thread that takes all five mutexes, and then
        ' ends without releasing them.
        '
        Dim t As New Thread(AddressOf AbandonMutex)
        t.Start()
        ' Make sure the thread is finished.
        t.Join()

        ' Wait on one of the abandoned mutexes. The WaitOne returns
        ' immediately, because its wait condition is satisfied by
        ' the abandoned mutex, but on return it throws
        ' AbandonedMutexException.
        Try
            _orphan1.WaitOne()
            Console.WriteLine("WaitOne succeeded.")
        Catch ex As AbandonedMutexException
            Console.WriteLine("Exception on return from WaitOne." _
                & vbCrLf & vbTab & "Message: " _
                & ex.Message) 
        Finally
            ' Whether or not the exception was thrown, the current
            ' thread owns the mutex, and must release it.
            '
            _orphan1.ReleaseMutex()
        End Try

        ' Create an array of wait handles, consisting of one
        ' ManualResetEvent and two mutexes, using two more of the
        ' abandoned mutexes.
        Dim waitFor(2) As WaitHandle
        waitFor(0) = _dummy
        waitFor(1) = _orphan2
        waitFor(2) = _orphan3

        ' WaitAny returns when any of the wait handles in the 
        ' array is signaled, so either of the two abandoned mutexes
        ' satisfy its wait condition. On returning from the wait,
        ' WaitAny throws AbandonedMutexException. The MutexIndex
        ' property returns the lower of the two index values for 
        ' the abandoned mutexes. Note that the Try block and the
        ' Catch block obtain the index in different ways.
        '  
        Try
            Dim index As Integer = WaitHandle.WaitAny(waitFor)
            Console.WriteLine("WaitAny succeeded.")

            Dim m As Mutex = TryCast(waitFor(index), Mutex)

            ' The current thread owns the mutex, and must release
            ' it.
            If m IsNot Nothing Then m.ReleaseMutex()
        Catch ex As AbandonedMutexException
            Console.WriteLine("Exception on return from WaitAny at index " _
                & ex.MutexIndex & "." _
                & vbCrLf & vbTab & "Message: " _
                & ex.Message) 

            ' Whether or not the exception was thrown, the current
            ' thread owns the mutex, and must release it.
            '
            If ex.Mutex IsNot Nothing Then ex.Mutex.ReleaseMutex()            
        End Try

        ' Use two more of the abandoned mutexes for the WaitAll call.
        ' WaitAll doesn't return until all wait handles are signaled,
        ' so the ManualResetEvent must be signaled by calling Set(). 
        _dummy.Set()
        waitFor(1) = _orphan4
        waitFor(2) = _orphan5

        ' The signaled event and the two abandoned mutexes satisfy
        ' the wait condition for WaitAll, but on return it throws
        ' AbandonedMutexException. For WaitAll, the MutexIndex
        ' property is always -1 and the Mutex property is always
        ' Nothing.
        '  
        Try
            WaitHandle.WaitAll(waitFor)
            Console.WriteLine("WaitAll succeeded.")
        Catch ex As AbandonedMutexException
            Console.WriteLine("Exception on return from WaitAll. MutexIndex = " _
                & ex.MutexIndex & "." _
                & vbCrLf & vbTab & "Message: " _
                & ex.Message) 
        Finally
            ' Whether or not the exception was thrown, the current
            ' thread owns the mutexes, and must release them.
            '
            CType(waitFor(1), Mutex).ReleaseMutex()
            CType(waitFor(2), Mutex).ReleaseMutex()
        End Try
    End Sub

    <MTAThread> _
    Public Shared Sub AbandonMutex()
        _orphan1.WaitOne()
        _orphan2.WaitOne()
        _orphan3.WaitOne()
        _orphan4.WaitOne()
        _orphan5.WaitOne()
        ' Abandon the mutexes by exiting without releasing them.
        Console.WriteLine("Thread exits without releasing the mutexes.")
    End Sub
End Class

' This code example produces the following output:
'
'Thread exits without releasing the mutexes.
'Exception on return from WaitOne.
'        Message: The wait completed due to an abandoned mutex.
'Exception on return from WaitAny at index 1.
'        Message: The wait completed due to an abandoned mutex.
'Exception on return from WaitAll. MutexIndex = -1.
'        Message: The wait completed due to an abandoned mutex.

Universal Windows Platform
Disponible desde 8
.NET Framework
Disponible desde 2.0
Portable Class Library
Compatible con: portable .NET platforms
Windows Phone Silverlight
Disponible desde 8.0
Windows Phone
Disponible desde 8.1

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Volver al principio
Mostrar:
© 2016 Microsoft