Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Interlocked (Clase)

Proporciona operaciones atómicas para las variables compartidas por varios subprocesos.

System.Object
  System.Threading.Interlocked

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

public static class Interlocked

El tipo Interlocked expone los siguientes miembros.

  NombreDescripción
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsAdd(Int32, Int32)Agrega dos enteros de 32 bits y reemplaza el primer entero con la suma, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsAdd(Int64, Int64)Agrega dos enteros de 64 bits y reemplaza el primer entero con la suma, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(Double, Double, Double)Compara dos números de punto flotante de precisión doble para comprobar si son iguales y, si lo son, reemplaza uno de los valores.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(Int32, Int32, Int32)Compara dos enteros de 32 bits con signo para comprobar si son iguales y, si lo son, reemplaza uno de los valores.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(Int64, Int64, Int64)Compara dos enteros de 64 bits con signo para comprobar si son iguales y, si lo son, reemplaza uno de los valores.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(IntPtr, IntPtr, IntPtr)Compara dos punteros o identificadores específicos de plataforma para comprobar si son iguales y, si lo son, reemplaza uno de ellos.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(Object, Object, Object)Compara dos objetos para comprobar si sus referencias son iguales y, si lo son, reemplaza uno de los objetos.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange(Single, Single, Single)Compara dos números de punto flotante de precisión sencilla para comprobar si son iguales y, si lo son, reemplaza uno de los valores.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsCompareExchange<T>(T, T, T)Compara dos instancias del tipo T de referencia especificado para comprobar si son iguales y, si lo son, sustituye una ellas.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDecrement(Int32)Disminuye el valor de una variable especificada y almacena el resultado, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsDecrement(Int64)Disminuye el valor de la variable especificada y almacena el resultado, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(Double, Double)Establece un número de punto flotante de precisión doble en un valor especificado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(Int32, Int32)Establece un entero de 32 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(Int64, Int64)Establece un entero de 64 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(IntPtr, IntPtr)Establece un puntero o identificador específico de plataforma en un valor especificado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(Object, Object)Establece un objeto en un valor especificado y devuelve una referencia al objeto original, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange(Single, Single)Establece un número de punto flotante de precisión sencilla en un valor especificado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsExchange<T>(T, T)Establece una variable del tipo T especificado en un valor determinado y devuelve el valor original, como una operación atómica.
Método públicoMiembro estáticoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsIncrement(Int32)Aumenta el valor de una variable especificada y almacena el resultado, como una operación atómica.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsIncrement(Int64)Aumenta el valor de una variable especificada y almacena el resultado, como una operación atómica.
Método públicoMiembro estáticoCompatible con .NET para aplicaciones de la Tienda WindowsMemoryBarriersincroniza el acceso de memoria como sigue: El procesador que ejecuta el subproceso actual no puede reordenar instrucciones de modo que los métodos de memoria antes de la llamada a MemoryBarrier se ejecute después de los métodos de memoria que realizan la llamada a MemoryBarrier.
Método públicoMiembro estáticoCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsReadDevuelve un valor de 64 bits, cargado como una operación atómica.
Arriba

Los métodos de esta clase ayudan a proteger de los errores que pueden producirse cuando el programador cambia de contexto mientras un subproceso está actualizando una variable a la que pueden obtener acceso otros subprocesos, o cuando dos subprocesos se están ejecutando simultáneamente en procesadores distintos. Los miembros de esta clase no producen excepciones.

Los métodos Increment y Decrement aumentan o disminuyen una variable y almacenan el valor resultante en una única operación. En la mayoría de los equipos, el incremento de una variable no es una operación atómica y requiere los pasos siguientes:

  1. Cargar un valor desde una variable de instancia hasta un registro.

  2. Aumentar o reducir el valor.

  3. Almacenar el valor en la variable de instancia.

Si no se utiliza Increment ni Decrement, un subproceso se puede adelantar después de que se hayan ejecutado los dos primeros pasos. Así, otro subproceso puede ejecutar los tres pasos. Cuando se reanuda la ejecución del primer subproceso, sobrescribe el valor de la variable de instancia y se pierde el efecto del aumento o reducción que realiza el segundo subproceso.

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

En el ejemplo de código siguiente se muestra un mecanismo de bloqueo de recursos seguro para la ejecución de subprocesos.


using System;
using System.Threading;

namespace InterlockedExchange_Example
{
    class MyInterlockedExchangeExampleClass
    {
        //0 for false, 1 for true.
        private static int usingResource = 0;

        private const int numThreadIterations = 5;
        private const int numThreads = 10;

        static void Main()
        {
            Thread myThread;
            Random rnd = new Random();

            for(int i = 0; i < numThreads; i++)
            {
                myThread = new Thread(new ThreadStart(MyThreadProc));
                myThread.Name = String.Format("Thread{0}", i + 1);

                //Wait a random amount of time before starting next thread.
                Thread.Sleep(rnd.Next(0, 1000));
                myThread.Start();
            }
        }

        private static void MyThreadProc()
        {
            for(int i = 0; i < numThreadIterations; i++)
            {
                UseResource();

                //Wait 1 second before next attempt.
                Thread.Sleep(1000);
            }
        }

        //A simple method that denies reentrancy.
        static bool UseResource()
        {
            //0 indicates that the method is not in use.
            if(0 == Interlocked.Exchange(ref usingResource, 1))
            {
                Console.WriteLine("{0} acquired the lock", Thread.CurrentThread.Name);

                //Code to access a resource that is not thread safe would go here.

                //Simulate some work
                Thread.Sleep(500);

                Console.WriteLine("{0} exiting lock", Thread.CurrentThread.Name);

                //Release the lock
                Interlocked.Exchange(ref usingResource, 0);
                return true;
            }
            else
            {
                Console.WriteLine("   {0} was denied the lock", Thread.CurrentThread.Name);
                return false;
            }
        }

    }
}  


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Este tipo es seguro para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft