我看到很多关于被多个线程访问的静态方法及其线程安全性的问题。我认为在确保线程安全方面我已经了解了其中的大部分内容,但是我不太确定的一件事是当您将“ref”变量引入静态方法本身的混合中时。这是一个简化的例子:
public static string ProcessMessage(object msg)
{
string outcome = "";
Decrypt(ref msg);
// parse msg
return outcome;
}
private static void Decrypt(ref object msg)
{
// decrypt msg
}
上面的例子是线程安全的吗?在静态方法中发生的所有处理都使用本地声明的变量,它只是从一个静态方法传递到另一个我不确定的 ref 对象。
最佳答案
这不是关于 static
与否,而是关于那些方法操作的数据 是如何隔离的。
如果您对引用类型 进行操作,它不是线程安全的,因为它在两个示例的代码中均有体现。
您需要使用一些锁定机制来确保线程安全。
关于c# - 通过引用传递的多个线程访问的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172337/