Leer en inglés

Compartir a través de


Interlocked.Exchange Método

Definición

Establece una variable en un valor especificado como una operación atómica.

Sobrecargas

Exchange(UInt16, UInt16)

Establece un entero de 16 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(UInt32, UInt32)

Establece un entero de 32 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(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.

Exchange(UIntPtr, UIntPtr)

Establece un identificador o puntero específico de la plataforma en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(UInt64, UInt64)

Establece un entero de 64 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(SByte, SByte)

Establece un entero de 8 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(Byte, Byte)

Establece un entero de 8 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(IntPtr, IntPtr)

Establece un identificador o puntero específico de la plataforma en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(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.

Exchange(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.

Exchange(Int16, Int16)

Establece un entero de 16 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(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.

Exchange(Object, Object)

Establece un objeto en un valor especificado y devuelve una referencia al objeto original, como una operación atómica.

Exchange<T>(T, T)

Establece una variable del tipo especificado T en un valor especificado y devuelve el valor original, como una operación atómica.

Exchange(UInt16, UInt16)

Importante

Esta API no es conforme a CLS.

Establece un entero de 16 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
[System.CLSCompliant(false)]
public static ushort Exchange (ref ushort location1, ushort value);

Parámetros

location1
UInt16

Variable que se va a establecer en el valor especificado.

value
UInt16

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9
Producto Versiones
.NET 9

Exchange(UInt32, UInt32)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

Importante

Esta API no es conforme a CLS.

Establece un entero de 32 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
[System.CLSCompliant(false)]
public static uint Exchange (ref uint location1, uint value);

Parámetros

location1
UInt32

Variable que se va a establecer en el valor especificado.

value
UInt32

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET 5, 6, 7, 8, 9

Exchange(Single, Single)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

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.

C#
public static float Exchange (ref float location1, float value);

Parámetros

location1
Single

Variable que se va a establecer en el valor especificado.

value
Single

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange(UIntPtr, UIntPtr)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

Importante

Esta API no es conforme a CLS.

Establece un identificador o puntero específico de la plataforma en un valor especificado y devuelve el valor original, como una operación atómica.

C#
[System.CLSCompliant(false)]
public static UIntPtr Exchange (ref UIntPtr location1, UIntPtr value);

Parámetros

location1
UIntPtr

Variable que se va a establecer en el valor especificado.

value
UIntPtr

Valor en el que se establece el parámetro location1.

Devoluciones

UIntPtr

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET 7, 8, 9

Exchange(UInt64, UInt64)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

Importante

Esta API no es conforme a CLS.

Establece un entero de 64 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
[System.CLSCompliant(false)]
public static ulong Exchange (ref ulong location1, ulong value);

Parámetros

location1
UInt64

Variable que se va a establecer en el valor especificado.

value
UInt64

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET 5, 6, 7, 8, 9

Exchange(SByte, SByte)

Importante

Esta API no es conforme a CLS.

Establece un entero de 8 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
[System.CLSCompliant(false)]
public static sbyte Exchange (ref sbyte location1, sbyte value);

Parámetros

location1
SByte

Variable que se va a establecer en el valor especificado.

value
SByte

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9
Producto Versiones
.NET 9

Exchange(Byte, Byte)

Establece un entero de 8 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static byte Exchange (ref byte location1, byte value);

Parámetros

location1
Byte

Variable que se va a establecer en el valor especificado.

value
Byte

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9
Producto Versiones
.NET 9

Exchange(IntPtr, IntPtr)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

Establece un identificador o puntero específico de la plataforma en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static IntPtr Exchange (ref IntPtr location1, IntPtr value);

Parámetros

location1
IntPtr

Variable que se va a establecer en el valor especificado.

value
IntPtr

Valor en el que se establece el parámetro location1.

Devoluciones

IntPtr

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange(Int64, Int64)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.CoreCLR.cs

Establece un entero de 64 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static long Exchange (ref long location1, long value);

Parámetros

location1
Int64

Variable que se va a establecer en el valor especificado.

value
Int64

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange(Int32, Int32)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.CoreCLR.cs

Establece un entero de 32 bits con signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static int Exchange (ref int location1, int value);

Parámetros

location1
Int32

Variable que se va a establecer en el valor especificado.

value
Int32

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

La dirección de location1 es un puntero null.

Ejemplos

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

C#
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;
            }
        }
    }
}

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange(Int16, Int16)

Establece un entero de 16 bits sin signo en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static short Exchange (ref short location1, short value);

Parámetros

location1
Int16

Variable que se va a establecer en el valor especificado.

value
Int16

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Se aplica a

.NET 9
Producto Versiones
.NET 9

Exchange(Double, Double)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.cs

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.

C#
public static double Exchange (ref double location1, double value);

Parámetros

location1
Double

Variable que se va a establecer en el valor especificado.

value
Double

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange(Object, Object)

Source:
Interlocked.cs
Source:
Interlocked.cs
Source:
Interlocked.CoreCLR.cs

Establece un objeto en un valor especificado y devuelve una referencia al objeto original, como una operación atómica.

C#
public static object Exchange (ref object location1, object value);
C#
public static object? Exchange (ref object? location1, object? value);

Parámetros

location1
Object

Variable que se va a establecer en el valor especificado.

value
Object

Valor en el que se establece el parámetro location1.

Devoluciones

Valor original de location1.

Excepciones

La dirección de location1 es un puntero null.

La dirección de location1 es un puntero null.

Comentarios

Importante

A partir de .NET Framework 2.0, la sobrecarga del método Exchange<T>(T, T) proporciona una alternativa segura para tipos de referencia. Se recomienda llamarlo en lugar de esta sobrecarga.

Consulte también

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Exchange<T>(T, T)

Source:
Interlocked.CoreCLR.cs
Source:
Interlocked.CoreCLR.cs
Source:
Interlocked.CoreCLR.cs

Establece una variable del tipo especificado T en un valor especificado y devuelve el valor original, como una operación atómica.

C#
public static T Exchange<T> (ref T location1, T value) where T : class;
C#
[System.Runtime.InteropServices.ComVisible(false)]
public static T Exchange<T> (ref T location1, T value) where T : class;

Parámetros de tipo

T

Tipo que se va a usar para location1 y value. Este tipo debe ser un tipo de referencia.

Parámetros

location1
T

Variable que se va a establecer en el valor especificado. Se trata de un parámetro de referencia (ref en C#, ByRef en Visual Basic).

value
T

Valor en el que se establece el parámetro location1.

Devoluciones

T

Valor original de location1.

Atributos

Excepciones

La dirección de location1 es un puntero null.

Se especifica un T no admitido.

Comentarios

Este método solo admite tipos de referencia. Hay sobrecargas del método Exchange para los tipos de valor Int32, Int64, IntPtr, Singley Double, pero no hay compatibilidad con otros tipos de valor.

Nota

Esta sobrecarga de método es preferible a la sobrecarga del método Exchange(Object, Object), ya que esta última requiere acceso enlazado en tiempo de ejecución al objeto de destino .

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0