次の方法で共有


Interlocked.Exchange メソッド

分割不可能な操作として指定した値を変数として設定します。

オーバーロードの一覧

分割不可能な操作として指定した値を 32 ビット符号付整数として設定し、元の値を返します。

.NET Compact Framework でもサポート。

[Visual Basic] Overloads Public Shared Function Exchange(ByRef Integer, Integer) As Integer

[C#] public static int Exchange(ref int, int);

[C++] public: static int Exchange(int*, int*);

[JScript] public static function Exchange(int, int) : int;

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

.NET Compact Framework でもサポート。

[Visual Basic] Overloads Public Shared Function Exchange(ByRef Object, Object) As Object

[C#] public static object Exchange(ref object, object);

[C++] public: static Object* Exchange(Object**, Object**);

[JScript] public static function Exchange(Object, Object) : Object;

分割不可能な操作として指定した値を単精度浮動小数点数として設定し、元の値を返します。

[Visual Basic] Overloads Public Shared Function Exchange(ByRef Single, Single) As Single

[C#] public static float Exchange(ref float, float);

[C++] public: static float Exchange(float*, float*);

[JScript] public static function Exchange(float, float) : float;

使用例

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

[Visual Basic, C#, C++] メモ   ここでは、Exchange のオーバーロード形式のうちの 1 つだけについて、使用例を示します。その他の例については、各オーバーロード形式のトピックを参照してください。

 
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++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

参照

Interlocked クラス | Interlocked メンバ | System.Threading 名前空間