在下面的示例中调用实例方法RenderHelp
是否安全?它调用Helper
类的静态方法,但不使用该类的任何静态变量。
如果Helper
的两个或多个不同实例(每个都在不同的线程上运行)调用RenderHelp
,那么 会出现问题吗?
public class Helper
{
public string ID { get; set; }
// other fields
static int[] Multiply(int[] a, int[] b)
{
if (a.Length == b.Length) return a.Zip(b, (a1, b2) => a1 * b2).ToArray();
else return null;
}
static int[] Add(int[] a, int[] b)
{
if (a.Length == b.Length) return a.Zip(b, (a1, b2) => a1 + b2).ToArray();
else return null;
}
public int[] RenderHelp(string help, int[]a, int[] b)
{
if (help == "Add".ToLower()) { return Add(a,b); }
else if (help == "Multiply".ToLower()) { return Multiply(a,b); }
else return null;
}
}
非常感谢与相关MSDN或其他文档的链接。谢谢。
*为什么stackoverflow没有正确格式化get
,如上所述?
答案 0 :(得分:3)
是的,这是线程安全的。线程问题通常发生在共享资源周围,您在此处没有这样做。这是遵循Microsoft threading建议:
避免提供改变静态的静态方法。共同的 在服务器场景中,静态状态在请求之间共享,这意味着 多个线程可以同时执行该代码。这打开了 线程错误的可能性。考虑使用设计模式 将数据封装到不共享的实例中 请求。
如果要在这些函数中的某处使用静态变量,那么除非你开始使用锁定或其他线程安全的方法处理该变量,否则它不会是线程安全的。