Thread.AllocateDataSlot メソッド
無名のデータ スロットをすべてのスレッドに割り当てます。
Public Shared Function AllocateDataSlot() As LocalDataStoreSlot
[C#]
public static LocalDataStoreSlot AllocateDataSlot();
[C++]
public: static LocalDataStoreSlot* AllocateDataSlot();
[JScript]
public static function AllocateDataSlot() : LocalDataStoreSlot;
戻り値
解説
スロットはすべてのスレッドに割り当てられます。
スレッドは、ローカル ストア メモリ機構を使用して、スレッド固有のデータを格納します。共通言語ランタイムは、各プロセスの作成時に、そのプロセスにマルチスロットのデータ ストア配列を割り当てます。スレッドは、データ ストアのデータ スロットを割り当てたり、スロットにデータ値を格納および取得したり、スレッドの有効期限が切れた後でスロットを再利用できるようにスロットを解放したりできます。データ スロットはスレッドごとに一意です。他のスレッドは (子スレッドであっても) そのデータを取得できません。
使用例
[Visual Basic, C#, C++] データ スロットにスレッド固有の情報を格納する方法の例を次に示します。
Imports System
Imports System.Threading
Class Test
Shared Sub Main()
Dim newThreads(3) As Thread
For i As Integer = 0 To newThreads.Length - 1
newThreads(i) = New Thread(AddressOf Slot.SlotTest)
newThreads(i).Start()
Next i
End Sub
End Class
Public Class Slot
Shared randomGenerator As Random
Shared localSlot As LocalDataStoreSlot
Shared Sub New()
randomGenerator = new Random()
localSlot = Thread.AllocateDataSlot()
End Sub
Shared Sub SlotTest()
' Set different data in each thread's data slot.
Thread.SetData(localSlot, randomGenerator.Next(1, 200))
' Write the data from each thread's data slot.
Console.WriteLine("Data in thread_{0}'s data slot: {1,3}", _
AppDomain.GetCurrentThreadId().ToString(), _
Thread.GetData(localSlot).ToString())
' Allow other threads time to execute SetData to show
' that a thread's data slot is unique to the thread.
Thread.Sleep(1000)
' Write the data from each thread's data slot.
Console.WriteLine("Data in thread_{0}'s data slot: {1,3}", _
AppDomain.GetCurrentThreadId().ToString(), _
Thread.GetData(localSlot).ToString())
End Sub
End Class
[C#]
using System;
using System.Threading;
class Test
{
static void Main()
{
Thread[] newThreads = new Thread[4];
for(int i = 0; i < newThreads.Length; i++)
{
newThreads[i] = new Thread(
new ThreadStart(Slot.SlotTest));
newThreads[i].Start();
}
}
}
class Slot
{
static Random randomGenerator;
static LocalDataStoreSlot localSlot;
static Slot()
{
randomGenerator = new Random();
localSlot = Thread.AllocateDataSlot();
}
public static void SlotTest()
{
// Set different data in each thread's data slot.
Thread.SetData(localSlot, randomGenerator.Next(1, 200));
// Write the data from each thread's data slot.
Console.WriteLine("Data in thread_{0}'s data slot: {1,3}",
AppDomain.GetCurrentThreadId().ToString(),
Thread.GetData(localSlot).ToString());
// Allow other threads time to execute SetData to show
// that a thread's data slot is unique to the thread.
Thread.Sleep(1000);
Console.WriteLine("Data in thread_{0}'s data slot: {1,3}",
AppDomain.GetCurrentThreadId().ToString(),
Thread.GetData(localSlot).ToString());
}
}
[C++]
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
__gc class Slot
{
static Random* randomGenerator;
static LocalDataStoreSlot* localSlot;
static Slot()
{
randomGenerator = new Random();
localSlot = Thread::AllocateDataSlot();
}
public:
static void SlotTest()
{
// Set different data in each thread's data slot.
Thread::SetData(localSlot,
__box(randomGenerator->Next(1, 200)));
// Write the data from each thread's data slot.
Console::WriteLine(S"Data in thread_{0}'s data slot: {1,3}",
AppDomain::GetCurrentThreadId().ToString(),
Thread::GetData(localSlot)->ToString());
// Allow other threads time to execute SetData to show
// that a thread's data slot is unique to the thread.
Thread::Sleep(1000);
Console::WriteLine(S"Data in thread_{0}'s data slot: {1,3}",
AppDomain::GetCurrentThreadId().ToString(),
Thread::GetData(localSlot)->ToString());
}
};
void main()
{
Thread* newThreads __gc[] = new Thread* __gc[4];
for(int i = 0; i < newThreads->Length; i++)
{
newThreads[i] = new Thread(
new ThreadStart(0, &Slot::SlotTest));
newThreads[i]->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
参照
Thread クラス | Thread メンバ | System.Threading 名前空間 | スレッドおよびスレッド処理 | スレッド ローカル ストレージおよびスレッドごとの相対静的フィールド