次の方法で共有


Interlocked.Exchange メソッド (Object, Object)

分割不可能な操作として指定した値をオブジェクトとして設定し、元のオブジェクトへの参照を返します。

Overloads Public Shared Function Exchange( _
   ByRef location1 As Object, _   ByVal value As Object _) As Object
[C#]
public static object Exchange(   ref objectlocation1,objectvalue);
[C++]
public: static Object* Exchange(   Object** location1,Object* value);
[JScript]
public static function Exchange(
   location1 : Object,value : Object) : Object;

パラメータ

  • location1
    指定した値に設定する変数。
  • value
    location1 パラメータに設定される値。

戻り値

location1 の元の値。

例外

例外の種類 条件
ArgumentNullException location1 のアドレスが null 参照 (Visual Basic では Nothing) です。

使用例

[Visual Basic, C#, C++] Exchange を参照型オブジェクトと共に使用する場合の構文の例を次に示します。

 
Imports System
Imports System.Threading

Public Class AtomicTest

    Shared Sub Main()
        Dim atomicExchange As New AtomicExchange()
        Dim firstThread As New Thread(AddressOf atomicExchange.Switch)
        firstThread.Start()
    End Sub

End Class

Public Class AtomicExchange

    Public Class SomeType
    End Class

    ' To use Interlocked.Exchange, someType1 
    ' must be declared as type Object.
    Dim someType1 As Object   
    Dim someType2 As SomeType 

    Sub New() 
        someType1 = New SomeType()
        someType2 = New SomeType()
    End Sub

    Sub Switch()
        someType2 = CType(Interlocked.Exchange( _
            someType1, CType(someType2, Object)), SomeType)
    End Sub

End Class

[C#] 
using System;
using System.Threading;

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

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);
    }
}

[C++] 
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;


__gc class AtomicExchange
{
    __gc 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();
    }

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

void main()
{
    AtomicExchange* atomicExchange = new AtomicExchange();
    Thread* firstThread = new Thread(
        new ThreadStart(atomicExchange, AtomicExchange::Switch));
    firstThread->Start();
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET, Common Language Infrastructure (CLI) Standard

参照

Interlocked クラス | Interlocked メンバ | System.Threading 名前空間 | Interlocked.Exchange オーバーロードの一覧 | スレッド処理 | Interlocked