¿Cuál es el uso de la clase entrelazada?

1 Respuestas


  • Clase entrelazada

    Proporciona operaciones atómicas para variables que comparten varios subprocesos.

    Espacio de nombres: System.Threading
    Asamblea: mscorlib (en mscorlib.dll)
    Sintaxis
    VB
    C #
    C ++
    F #
    JScript
    Copiar

    'Declaración

    Pública NotInheritable Clase Interlocked

    Observaciones

    Los métodos de esta clase de ayuda proteger contra los errores que pueden ocurrir cuando el programador cambia contextos, mientras que un hilo es la actualización una variable a la que pueden acceder otros subprocesos, o cuando dos subprocesos se ejecutan simultáneamente en procesadores separados. Los miembros de esta clase no lanzan excepciones.

    Los métodos Incremento y Decremento incrementan o decrementan una variable y almacenan el valor resultante en una sola operación. En la mayoría de las computadoras, incrementar una variable no es una operación atómica, que requiere los siguientes pasos:

       1.

      Cargue un valor de una variable de instancia en un registro.
       2.

      Incrementar o reducir el valor.
       3.

      Almacene el valor en la variable de instancia.

    Si no usa Incrementar y Disminuir, un hilo puede ser reemplazado después de ejecutar los dos primeros pasos. Luego, otro hilo puede ejecutar los tres pasos. Cuando el primer subproceso reanuda la ejecución, sobrescribe el valor en la variable de instancia y se pierde el efecto del incremento o decremento realizado por el segundo subproceso.

    El método Exchange intercambia atómicamente los valores de las variables especificadas. El método CompareExchange combina dos operaciones: comparar dos valores y almacenar un tercer valor en una de las variables, según el resultado de la comparación. Las operaciones de comparación e intercambio se realizan como una operación atómica.
    Ejemplos

    El siguiente ejemplo de código muestra un mecanismo de bloqueo de recursos seguro para subprocesos.
    VB
    C #
    C ++
    F #
    JScript
    Copiar

    importaciones Importaciones del sistema
    System.Threading

    Espacio de nombres InterlockedExchange_Example
        Clase MyInterlockedExchangeExampleClass
      '0 para falso, 1 para verdadero.
      Privado Compartido usingResource As Integer = 0

      Private Const numThreadIterations As Integer = 5
      Private Const numThreads As Integer = 10

      _
      Shared Sub Main ()
      Dim myThread As Thread
      Dim rnd As New Random ()

      Dim I As Integer
      For I = 0 To numThreads - 1
      myThread = New Thread (AddressOf MyThreadProc)
      myThread.Name = String.Format ("Thread {0}", I + 1)

      'Espere una cantidad aleatoria de tiempo antes de comenzar el siguiente hilo.
      Thread.Sleep (rnd.Next (0, 1000))
      myThread.Start ()
      Next I
      End Sub 'Main

      Private Shared Sub MyThreadProc ()
      Dim I As Integer
      For I = 0 To numThreadIterations - 1
      UseResource ()

      'Espere 1 segundo antes del próximo intento.
      Thread.Sleep (1000)
      Next I
      End Sub

      'Un método simple que niega la reentrada.
      Función compartida UseResource () Como booleano
      '0 indica que el método no está en uso.
      Si 0 = Interlocked.Exchange (usingResource, 1) Then
      Console.WriteLine ("{0} adquirió el bloqueo", Thread.CurrentThread.Name)

      'El código para acceder a un recurso que no es seguro para subprocesos iría aquí.
      'Simular un
      hilo de trabajo . Dormir (500)

      Console.WriteLine ( "{0} Bloqueo de salir", Thread.CurrentThread.Name)

      'Suelte el bloqueo
      Interlocked.Exchange (usingResource, 0)
      devuelven True
      Else
      Console.WriteLine ( "{0} se le negó la cerradura", Thread.currentThread .Name)
      Devuelve False
      End If
      End Función
        End Class
    End Espacio de nombres

Escribe tu respuesta

Tu respuesta aparecerá después de la moderación