Pra*_*ind 11 c# multithreading
我创建了一个包含5个静态函数的CommonUtils.cs文件(因此我可以将这个.cs复制到Visual Studio中的其他项目,因为我开发了不同的C#应用程序)以及我有很多源文件.
现在,我已将我的项目编译为DLL.此DLL由IIS服务器作为应用程序托管.许多客户使用此dll执行某些操作,比如他们生成报告.
我被告知在这种情况下不能慷慨地使用"静态函数"它们应该被应用,一个"锁定"机制,因为没有锁定,单个程序实例的多个线程或程序的多个实例,都可以表现不料.这是真的吗?
Chr*_*tos 11
我被告知在这种情况下不能慷慨地使用"静态函数"它们应该被应用,一个"锁定"机制,因为没有锁定,单个程序实例的多个线程或程序的多个实例,都可以表现不料.这是真的吗?
让我们一块一块地打破它.什么是静态类?
静态类与非静态类基本相同,但有一个区别:静态类无法实例化.换句话说,您不能使用new关键字来创建类类型的变量.因为没有实例变量,所以可以使用类名本身访问静态类的成员.
CLR如何处理静态类?
与所有类类型的情况一样,当加载引用该类的程序时,.NET Framework公共语言运行库(CLR)会加载静态类的类型信息.程序无法准确指定何时加载类.但是, 保证 在程序中第 一次引用类之前,可以加载并初始化其字段并调用其静态构造函数.静态构造函数只调用一次,静态类在 程序所在的应用程序域的生命周期内保留在内存中.
为什么我们可能需要锁定?
基本上,当我们有竞争条件时需要锁定.当有人可能读取其他人可能在同一时间改变他们的数据.两个独立的线程可以访问共享资源,并且没有任何机制可以阻止这种情况.为了回答你的问题,你首先要回答另一个问题.
您的静态方法是否访问共享资源并且可能存在任何竞争条件?如果这是真的,那么你需要使用锁定.否则,不需要它.
有关静态类的更多信息,请查看此处.如果您需要有关线程同步技术的更多信息,请在此处查看.
函数是不可变的,因此在调用函数时不需要同步.函数参数是可变的,但每次调用都有自己的本地副本.无需同步.
当多个线程处理相同数据并且至少有一个编写器时,需要同步.这是关于线程之间共享的任何变量.需要注意静态变量和静态变量可以访问的任何实例变量.
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |