C# 多个类可以使用多个引用锁定同一个对象吗?

标签 c# multithreading

我想创建这个类的多个实例。

public class Worker
{
    private object _lockObject;
    private Thread _workerThread;
    private string _name;

    public Worker(object lockObject, string name)
    {
        _name = name;
        _lockObject = lockObject;
        _workerThread = new Thread(new ThreadStart(DoWork));
        _workerThread.Start();
    }
    private void DoWork()
    {
        while(true)
        {
            lock(_lockObject)
            {
                Console.WriteLine(_name + "Doing Work");
            }
        }
    }
}

如果我将同一个锁对象传递给该类的多个实例,一个类实例中的锁会导致另一个类实例等待该锁释放吗?

static void Main()
{
    private readonly object sharedLockObject = new object();
    Worker a = new Worker(sharedLockObject,"a");
    Worker b = new Worker(sharedLockObject,"b");
    Console.ReadLine();
}

我认为在上述情况下,Workers 永远不会: Console.WriteLine(_name + "工作中"); 同时?

我只是想确认一下,因为我不确定 lock() 是否会锁定引用或被引用的对象。

谢谢!

最佳答案

是的,object 是一个引用类型,因此您要传递对同一个对象的引用,这样每个 Worker 都会使用同一个对象。该对象用于锁定,而不是引用。

关于C# 多个类可以使用多个引用锁定同一个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1763522/

相关文章:

c# - 仅更改列表框的 DataValueField?

swift - 我如何解决此 : UILabel. 文本必须仅从主线程使用

c# - 从线程MVVM更新进度栏

c# - 在保持双向绑定(bind)的同时将过滤后的 ObservableCollection 绑定(bind)到 ListView?

c - c、openmp的CAS实现

java - 程序由于变量 “may be uninitialized”而无法运行?

python - 如何为不同Python进程之间的不同神经网络设置共享权重?

javascript - 正在验证 MVC 隐藏字段

c# - 在 .C# 和 NET 5 中,在 struct 和 Span<byte> 之间进行无不安全的转换,反之亦然

c# - ASP.NET MVC5 WebAPI2 防止未经授权重定向到登录页面