我想创建这个类的多个实例。
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/