c# - C#多线程-锁定

标签 c# multithreading locking

在某些情况下,我对锁定的概念有些困惑。让我解释一下,假设我有以下几点:

private readonly MyClass myObj;

private void Go(object state)
{
    // call an instance member of myObj, but does it need to be locked?
    myObj.SomeMethod(state);
}

因此,问题是调用SomeMethod时是否需要将myObj锁定?它是只读的,但是由于多个线程可以以不同的状态调用myObj的实例方法SomeMethod,这不会引起问题吗?

谢谢。

最佳答案

变量是只读的,但是对象可能是可变的或不可变的,即使这样并不能真正告诉您是否可以在多个线程中安全地使用它。

换句话说,它取决于MyClass的实现,以及是否希望从引用同一Go实例的多个线程中调用MyClass。 (这些天来,我倾向于编写类来确保线程不是安全的,但是通常每个线程都会拥有自己的一组对象来玩-因此,我可能会有一个包含Go的类的实例和MyClass的实例,但是知道其他线程不应该使用相同的实例。)

关于c# - C#多线程-锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981806/

相关文章:

c - 通知父线程终止

Django:在后台发送电子邮件的最佳方式?

c# - "Fixed"/"Load Balanced"C# 线程池?

C# wpf scrollviewer 不像windows store app那样工作

C# 插件,是 Assembly.LoadFrom()... 类慢吗?

c# - 数据库中的 HTML 标签是不好的做法还是好的做法?

javascript - 我如何阻止非特权用户的部分内容

c# - 是否有 Owin.Security.Providers.OpenID 的强命名版本

python - 编程面试要素中的死锁题19.5

c# - 如何锁定一段特定的代码 C#