I want to make multiple instances of this class.
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");
}
}
}
}
If I pass the same lock object to multiple instances of the class, will a lock in one class instance result in the other class instance waiting on that lock to be free?
static void Main()
{
private readonly object sharedLockObject = new object();
Worker a = new Worker(sharedLockObject,"a");
Worker b = new Worker(sharedLockObject,"b");
Console.ReadLine();
}
I think that in the above case, Workers will never be :
Console.WriteLine(_name + “Doing Work”);
at the same time?
I just would like some confirmation, as I am unsure as to whether the lock() will lock the reference, or the object that is referenced.
Thanks!
Yes,
objectis a reference type so you are passing a reference to the same object, so that same object would be used by each Worker. The object is used for locking, not the reference.