使用 ThreadStaticAttribute






3.67/5 (2投票s)
这是一个属性,它指示变量在每个线程中都有一个实例。这是静态变量的一种变体。静态变量
这是一个属性,它指示变量在每个线程中都有一个实例。这是静态变量的一种变体。静态变量在程序的整个生命周期中只有一个实例。用 [ThreadStatic] 标记的变量在程序中每个线程都有一个实例。
语法如下所示(C#):
[ThreadStatic]
static int someValue;
为了更好地理解这个特性,让我们考虑以下程序:
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
public static int accessed = 0;
[ThreadStatic]
public static int accessedInaThread = 0; //我们希望这个变量在每个线程中都是静态的
static void Main(string[] args)
{
Program prog = new Program();
//定义线程
Thread thread1 = new Thread(new ThreadStart(prog.ThreadFunc1));
Thread thread2 = new Thread(new ThreadStart(prog.ThreadFunc2));
//启动 thread1
thread1.Start();
//等待 thread1 完成
thread1.Join();
//启动 thread2
thread2.Start();
//等待 thread2 完成
thread2.Join();
}
public void ThreadFunc1()
{
accessed++;
accessedInaThread++;
Console.WriteLine("Thread1 中 accessed 的值: " + accessed.ToString());
Console.WriteLine("Thread1 中 accessedInaThread 的值: " + accessedInaThread.ToString());
}
public void ThreadFunc2()
{
accessed++;
accessedInaThread++;
Console.WriteLine("Thread2 中 accessed 的值: " + accessed.ToString());
Console.WriteLine("Thread2 中 accessedInaThread 的值: " + accessedInaThread.ToString());
}
}
}
这里 accessed 是一个静态变量,而 accessedInaThread 是一个 ThreadStatic 变量。这些变量在两个不同的线程中被访问和修改。请注意程序的输出:
Thread1 中 accessed 的值: 1
Thread1 中 accessedInaThread 的值: 1
Thread2 中 accessed 的值: 2
Thread2 中 accessedInaThread 的值: 1
这里 threadstatic 变量为每个线程都有不同的副本。因此,thread1 中值的变化不会影响 thread2 中的值。