Interlocked.Exchange Method (Object, Object)

Sets an object to a specified value and returns a reference to the original object, as an atomic operation.

Namespace:  System.Threading
Assemblies:   mscorlib (in mscorlib.dll)
  System.Threading (in System.Threading.dll)

public static Object Exchange(
	ref Object location1,
	Object value


Type: System.Object

The variable to set to the specified value.

Type: System.Object

The value to which the location1 parameter is set.

Return Value

Type: System.Object
The original value of location1.


The address of location1 is a null pointer.

Beginning with .NET Framework version 2.0, the Exchange<T>(T, T) method overload provides a type-safe alternative for reference types.

The following code example shows the syntax for using Exchange with any reference type object.

using System;
using System.Threading;

class AtomicTest
    static void Main()
        AtomicExchange atomicExchange = new AtomicExchange();
        Thread firstThread = 
            new Thread(new ThreadStart(atomicExchange.Switch));

class AtomicExchange
    class SomeType{}

    // To use Interlocked.Exchange, someType1  
    // must be declared as type Object. 
    object   someType1;
    SomeType someType2;

    public AtomicExchange() 
        someType1 = new SomeType();
        someType2 = new SomeType();

    public void Switch()
        someType2 = (SomeType)Interlocked.Exchange(
            ref someType1, (object)someType2);

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

Portable Class Library

Supported in: Portable Class Library

Supported in: Windows Phone 8.1

Supported in: Windows Phone Silverlight 8.1

Supported in: Windows Phone Silverlight 8
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
© 2015 Microsoft