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);
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();
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();
从笔记的中,学习总结:
- 线程的变量我们有三种存储方式:槽位,ThreadState.ThreadLocal
- 线程的公共变量会存在锁的关系(多个线程使用同一个资源,会使得资源被占用,使用锁可以解决线程并发之间的资源共享)
- 线程中的变量是在哪个线程给变量赋值的,就只能在那个线程能取值,其他线程取不到(3中方式是一个道理,只是有性能区别)
以上是关于C#多线程并行编程--第三课的主要内容,如果未能解决你的问题,请参考以下文章