c# - 通过引用传递的多个线程访问的静态方法

标签 c# multithreading

我看到很多关于被多个线程访问的静态方法及其线程安全性的问题。我认为在确保线程安全方面我已经了解了其中的大部分内容,但是我不太确定的一件事是当您将“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/

相关文章:

c# - UWP SQL Server 迁移不起作用

c# - 如何阻止 EF 逆向工程师将表名称的复数更改为单数?

multithreading - 在两个线程之间共享大型只读结构的最佳方法是什么?

java - 从java访问全局C变量

ios - 从另一个线程调用的 CoreData ContextObjectsDidChangeNotification

c# - 如何在 .net core 3.1 中使用 ConfigurationBulder 绑定(bind)到配置类

c# - 无法从用法推断方法 'ElasticClient.Index<T>(IIndexRequest<T>)' 的类型参数

c# - 在 LINQ 数据源/ GridView 中使用文本框值作为参数 : A value of type 'String' cannot be converted to type 'Double'

C编程: How to use mmap(2) to read file parallel by multiple threads?

windows - VB - 以隐式方式链接 DLL