zoukankan      html  css  js  c++  java
  • .NET 中的线程池和[ThreadStatic]属性

    本文实验了一下.NET 中的线程池和[ThreadStatic]属性的作用:

    class Program
    {
        [ThreadStatic]
        static int Number;
    
        static void Main(string[] args)
        {
            //for (int i = 0; i < 10; i++)
            //{
            //    ThreadPool.QueueUserWorkItem(new WaitCallback(ThreadProc));
            //}
            for (int i = 0; i < 10; i++)
            {
                Thread t = new Thread(delegate()
                {
                    ThreadProc(null);
                });
                t.Start();
            }
            Console.WriteLine("Press any key to exit.");
            Console.Read();
        }
    
        static void ThreadProc(Object stateInfo)
        {
            Interlocked.Increment(ref Number);
            Console.WriteLine(Number);
        }
    
    }

    image

    图一

    image

    图二
    上图分别为ThreadPool和不用的结果。由图二可见,由于 ThreadStatic属性的作用,尽管Number是静态变量,每个线程中都各自独立。而由图一,由于线程池会重用线程,只有4个独立的Number变量创建出来。因此对于线程池,每个线程结束时清理静态变量是非常重要的。

  • 相关阅读:
    C语言 弹跳小球
    selenium 相关操作
    aiohttp 多任务异步协程
    39 数据库索引
    36 数据库 库表行增删改查 枚举 集合
    07 线程池回调函数
    06 gevent版真正的协程
    05 greenlet版协程
    03 线程池
    04 生成器版协程
  • 原文地址:https://www.cnblogs.com/foamliu/p/2125203.html
Copyright © 2011-2022 走看看