私はこのクラスの複数のインスタンスを作りたいと思います。C#複数のクラスを使用すると複数の参照を使用して同じオブジェクトをロックできますか?
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");
}
}
}
}
私はクラスの複数のインスタンスに同じロックオブジェクトを渡すと、1つのクラスのインスタンスでロックが自由になり、そのロックを待っている他のクラスのインスタンスになりますか?
static void Main()
{
private readonly object sharedLockObject = new object();
Worker a = new Worker(sharedLockObject,"a");
Worker b = new Worker(sharedLockObject,"b");
Console.ReadLine();
}
私は、上記の場合には、労働者がなることはありませんと思います: ます。Console.WriteLine(_nameが+ "仕事をしています");同時に ?
私はlock()が参照をロックするか、参照されるオブジェクトをロックするかどうか不安です。
ありがとうございました!
おかげで「オブジェクトは、ないの参照をロックするために使用される」C#の仕様 – divinci
でそれを見つけるのが大好きだ「ロック文は、指定されたオブジェクトの相互排他ロックを取得します」。 com/en-us/library/aa664735(VS.71).aspx – GraemeF
'オブジェクトは参照用ではなくロック用に使用されています。彼はまた、tghisクラスの複数のインスタンス以外のコード内の他の場所から同じ共有メモリへのアクセスを同期する必要がない限り、それはクリティカルセクションだ場合 – Alexandre