正在从实例方法线程安全调用静态方法

本文关键字:安全 调用 静态方法 线程 实例方法 | 更新日期: 2023-09-27 18:11:11

在下面的例子中调用实例方法RenderHelp线程安全吗?它调用Helper类的静态方法,但不使用该类的任何静态变量。如果Helper的2个或更多不同的实例(每个运行在不同的线程上)调用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,如上所述?

正在从实例方法线程安全调用静态方法

是的,这是线程安全的。线程问题通常发生在共享资源的时候,这里我们不会这样做。这是遵循微软线程建议:

避免提供改变静态状态的静态方法。共同之处服务器场景中,静态状态是跨请求共享的,这意味着多个线程可以同时执行该代码。这就打开了线程错误的可能性。考虑使用设计模式它将数据封装到不跨实例共享的实例中请求。

如果你要在这些函数的某个地方使用静态变量,那么除非你开始使用锁或其他线程安全的方法来处理该变量,否则它将不是线程安全的。