C#多线程并行编程--第三课

Posted 2828sea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#多线程并行编程--第三课相关的知识,希望对你有一定的参考价值。

1.Thread中的一些静态方法

  • AllocateDataSlot:无名称的槽位
  • AllocateNamedDataSlot:有名称的槽位
  • GetNamedDataSlot:通过槽位的名称获取LocalDataStoreSlot,在通过GetData(LocalDataStoreSlot)得到存放在的槽位的数据
  • FreeNamedDataSlot:释放槽位的名称

     给所有的线程分配一个数据槽,存放数据

     GetData

     SetData

技术图片
            ////分配已经命名的槽位
            //var solt=Thread.AllocateNamedDataSlot("username");
            //// var solt = Thread.AllocateDataSlot();
            ////在主线程中给槽位赋值,只能在主线程读取,子线程读取不到
            //Thread.SetData(solt, "Hello Word!");
            //var t = new Thread(()=> 

            //    var obj = Thread.GetData(solt);
            //    Console.WriteLine("当前工作的线程:0",obj);
            //);
            //t.Start();

            //var obj2= Thread.GetData(solt);
            //Console.WriteLine("主线程:0", obj2);
View Code

2.Thread中的一些静态方法的使用

   变量=>Thread的关系t1,t2

   t1,t2 共享变量 public 有锁

  t1,t2各有一个变量 internel 无锁

3.性能提升版本 ThreadState

技术图片
   [ThreadStatic]
        static string username = string.Empty;
        static void Main(string[] args)
        
            username = "Hello Word!";
            var t = new Thread(() =>
            

                Console.WriteLine("当前工作的线程:0", username);
            );
            t.Start();
            Console.WriteLine("主线程:0", username);
            Console.Read();
View Code

4.ThreadLocal:也是用来做线程可见性

技术图片
        static void Main(string[] args)
        
            ThreadLocal<string> local = new ThreadLocal<string>();
            local.Value = "Hello World!";
            //username = "Hello Word!"; 
            var t = new Thread(() =>
            
                Console.WriteLine("当前工作的线程:0", local.Value);
            );
            t.Start();
            Console.WriteLine("主线程:0", local.Value);
            Console.Read();
View Code

从笔记的中,学习总结:

  1. 线程的变量我们有三种存储方式:槽位,ThreadState.ThreadLocal
  2. 线程的公共变量会存在锁的关系(多个线程使用同一个资源,会使得资源被占用,使用锁可以解决线程并发之间的资源共享)
  3. 线程中的变量是在哪个线程给变量赋值的,就只能在那个线程能取值,其他线程取不到(3中方式是一个道理,只是有性能区别)

以上是关于C#多线程并行编程--第三课的主要内容,如果未能解决你的问题,请参考以下文章

C# 并行和多线程编程——认识和使用Task

第三篇:GPU 并行编程的运算架构

Visual Studio 2010多线程编程

python中的多线程和多进程编程

C# Thread开启线程的几种方式

C#并发编程之初识并行编程