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