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
Assembly:  mscorlib (in mscorlib.dll)

public:
static Object^ Exchange(
	Object^% location1,
	Object^ value
)

Parameters

location1
Type: System::Object^%

The variable to set to the specified value.

value
Type: System::Object^

The value to which the location1 parameter is set.

Return Value

Type: System::Object^

The original value of location1.

Exception Condition
ArgumentNullException

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 namespace System;
using namespace System::Threading;
ref class AtomicExchange
{
private:
   ref class SomeType{};


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

public:
   AtomicExchange()
   {
      someType1 = gcnew SomeType;
      someType2 = gcnew SomeType;
   }

   void Switch()
   {
      someType2 = dynamic_cast<SomeType^>(Interlocked::Exchange( someType1, dynamic_cast<Object^>(someType2) ));
   }

};

int main()
{
   AtomicExchange^ atomicExchange = gcnew AtomicExchange;
   Thread^ firstThread = gcnew Thread( gcnew ThreadStart( atomicExchange, &AtomicExchange::Switch ) );
   firstThread->Start();
}

Universal Windows Platform
Available since 8
.NET Framework
Available since 1.1
Portable Class Library
Supported in: portable .NET platforms
Windows Phone Silverlight
Available since 8.0
Windows Phone
Available since 8.1
Return to top
Show: