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

div*_*nci 5 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");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我将同一个锁对象传递给该类的多个实例,那么一个类实例中的锁会导致另一个等待该锁的类实例是否空闲?

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

我认为在上面的例子中,Workers永远不会是:Console.WriteLine(_name +"Doing Work"); 同时?

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

谢谢!

Gra*_*meF 14

是的,object是一个引用类型,因此您传递对同一对象的引用,以便每个Worker使用相同的对象.该对象用于锁定,而不是引用.

  • `对象用于锁定,而不是引用。` 是什么意思? (2认同)