C#--线程本地化存储

简介: 有时以单个线程为基础存储信息比较方便,所存储的信息只对该线程有用,这叫做线程本地化存储。通常用Thread对象的AllocateNamedDataSlot方法创建存储名,用GetData取出内容,最后用FreeNamedDataSlot释放。

      有时以单个线程为基础存储信息比较方便,所存储的信息只对该线程有用,这叫做线程本地化存储。通常用Thread对象的AllocateNamedDataSlot方法创建存储名,用GetData取出内容,最后用FreeNamedDataSlot释放。

     

 
 
1 /*
2 Example14_4.cs illustrates the use of thread-local storage
3 */
4
5 using System;
6 using System.Threading;
7
8 class Example14_4
9 {
10
11 // the WriteError method writes error info from the current thread
12 public static void WriteError()
13 {
14 Console.WriteLine( " Error number = " + Thread.GetData(Thread.GetNamedDataSlot( " ErrNo " )));
15 Console.WriteLine( " Error source = " + Thread.GetData(Thread.GetNamedDataSlot( " ErrSource " )));
16 }
17
18 // the SetError method sets a random error number
19 public static void SetError()
20 {
21 Random r = new Random();
22 Thread.SetData(Thread.GetNamedDataSlot( " ErrNo " ), r.Next( 100 ));
23 Thread.SetData(Thread.GetNamedDataSlot( " ErrSource " ) ,Thread.CurrentThread.Name);
24 WriteError();
25 }
26
27 public static void Main()
28 {
29 // allocate some named data slots
30 Thread.AllocateNamedDataSlot( " ErrNo " );
31 Thread.AllocateNamedDataSlot( " ErrSource " );
32
33 // create and start a second thread
34 Thread t2 = new Thread( new ThreadStart(SetError));
35 t2.Name = " t2 " ;
36 t2.Start();
37
38 // create a third thread
39 Thread t3 = new Thread( new ThreadStart(SetError));
40 t3.Name = " t3 " ;
41 t3.Start();
42
43 // clean up the data slots
44 Thread.FreeNamedDataSlot( " ErrNo " );
45 Thread.FreeNamedDataSlot( " ErrSource " );
46
47 }
48
49 }
相关文章
|
8月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
217 3
|
8月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法
|
8月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
8月前
|
C#
C#学习相关系列之多线程---ConfigureAwait的用法
C#学习相关系列之多线程---ConfigureAwait的用法
145 0
|
8月前
|
C#
C#学习相关系列之多线程---TaskCompletionSource用法(八)
C#学习相关系列之多线程---TaskCompletionSource用法(八)
237 0
|
5月前
|
数据采集 XML JavaScript
C# 中 ScrapySharp 的多线程下载策略
C# 中 ScrapySharp 的多线程下载策略
|
4月前
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
89 0
|
8月前
|
存储 缓存 安全
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
【C/C++ 关键字 存储类说明符 】 线程局部变量的魔法:C++ 中 thread_local的用法
159 0
|
5月前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
64 0