我有一个C#类,可以使用不同的构造函数进行实例化,但它也包含一些静态帮助器方法,这些方法只能使用它们的参数,也可以从其他类中调用.
现在我想知道从不同线程到这样一个方法的并发调用是否是线程安全的,或者换句话说,静态方法中的变量是否可能被call2改变,而call1仍在进行中?
public class AwesomeClass
{
/* constructors and stuff */
public static bool HelperMethod(object o1)
{
string someString = "";
Func<object, string> doSomething = (o) => {
string someOtherString == null;
if (someString.Length == 0)
{
/* time consuming process using o... frequently
changes someString and someOtherString */
}
return someOtherString;
};
return doSomething(o1).Length > 0 && someString.Length < 10;
}
}
Run Code Online (Sandbox Code Playgroud)
如果someString在示例中可以通过thread2调用来更改,HelperMethod而doSomething仍然在为thread1工作,那我就麻烦了.
如果静态方法不更改任何成员变量,并且不对其参数调用变异方法,则它是可重入的,因此是线程安全的.
当并发线程使用与其参数相同的对象调用方法时,对其参数执行变异操作的静态方法可能不是线程安全的.
例如,如果您的方法o1通过方法,属性或公共变量进行变异,则该方法将不再是线程安全的.
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |