Jon*_*ter 11 c# multithreading global-variables
我有一个非常古老但非常大的库,我正在考虑转换为C#类库.现有库使用存储在TLS中的许多全局变量.C#没有真正的全局变量概念,但是一个解决方法是使用一个名为GlobalVar的静态类,并将它们全部放在这个类中,以便可以通过GlobalVar.xxxxxx访问它们
但是,我的想法是,这会破坏所有正在转换的现有代码,因为GlobalVar类将是一个普通的全局类,而不是每个线程存储.有没有办法让这些全局变量成为每个线程?即C#中__declspec(thread)静态的等价物是什么?
在这一点上我应该补充一点,我讨厌全局变量.我认为它们往往是设计不佳的结果.但是,由于严格的时间限制,第一阶段是将库转换为C#,而不是大惊小怪,然后第二阶段将正确地重新设计它们.
xan*_*tos 15
有ThreadLocal类(在4.0中引入)和ThreadStaticAttribute.
在ThreadStaticAttribute
只能使用static
领域.该ThreadLocal
班可上"正常"的领域中使用,但其速度较慢.
请注意,如果你不控制你所在的线程(例如你是一个ASP.NET页面,你开始使用"随机"预先使用的线程,或者你是一个ThreadPool的线程),那么你的"thread-static"(通常不是属性)变量将使用前一个线程的旧值进行预初始化.(参见例如两种技术的故事:[ThreadStatic]属性和System.Web.HttpContext.Current.Items)
我忘记了,有一些Thread.AllocateDataSlot具有与其他类似的"目标".
归档时间: |
|
查看次数: |
9792 次 |
最近记录: |