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

1.Thread中的一些静态方法并发

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

     给全部的线程分配一个数据槽,存放数据ide

     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中的一些静态方法的使用spa

   变量=>Thread的关系t1,t2线程

   t1,t2 共享变量 public 有锁code

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

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:也是用来作线程可见性string

        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中方式是一个道理,只是有性能区别)
相关文章
相关标签/搜索