在 C# 中,可以使用 ThreadLocal<T> 类来创建一个在每个线程中都有自己独立副本的全局变量。这对于在多线程环境中避免变量值相互干扰非常有用。

以下是一个使用 ThreadLocal<T> 的示例代码:

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    // 创建一个 ThreadLocal<int> 变量
    static ThreadLocal<int> _threadLocal = new ThreadLocal<int>(() =>
    {
        // 初始化每个线程的变量值
        return Thread.CurrentThread.ManagedThreadId;
    });

    static void Main()
    {
        // 启动多个任务
        Task.Run(() =>
        {
            // 在任务中访问 _threadLocal 变量
            for (int i = 0; i < _threadLocal.Value; i++)
            {
                Console.WriteLine($'Task 1: {_threadLocal.Value}');
                Thread.Sleep(1000);
            }
        });

        Task.Run(() =>
        {
            // 在任务中访问 _threadLocal 变量
            for (int i = 0; i < _threadLocal.Value; i++)
            {
                Console.WriteLine($'Task 2: {_threadLocal.Value}');
                Thread.Sleep(1000);
            }
        });

        Console.ReadLine();
    }
}

在这个示例中,我们创建了一个 ThreadLocal<int> 变量,并使用 lambda 表达式初始化每个线程的变量值为当前线程的 ID。然后,我们启动了两个任务,并在每个任务中访问 _threadLocal 变量。

在每个任务中,通过 _threadLocal.Value 属性获取变量的值。由于每个线程都有自己独立的副本,所以每个任务中的 _threadLocal.Value 值都会是不同的。

需要注意的是,ThreadLocal<T> 变量的值只在当前线程中可见,在其他线程中不可见。如果需要在多个线程之间共享数据,可以考虑使用其他线程同步机制,如锁、互斥量等。

ThreadLocal<T> 在以下情况下很有用:

  • 当每个线程需要独立的全局变量时
  • 当需要避免线程之间对全局变量的访问冲突时

使用 ThreadLocal<T> 可以有效地提高多线程程序的效率和安全性。

C# 多线程中每个任务的独立全局变量:ThreadLocal 使用指南

原文地址: https://www.cveoy.top/t/topic/bSBe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录