If I have
abstract class Parent
{
static object staticLock = new object();
public void Method1()
{
lock(staticLock)
{
Method2();
}
}
protected abstract Method2();
}
class Child1 : Parent
{
protected override Method2()
{
// Do something ...
}
}
class Child2 : Parent
{
protected override Method2()
{
// Do something else ...
}
}
Will calls to new Child1().Method1()
and new Child2().Method1()
use the same lock?
To add to ken2k's answer: [Yes] ... unless it's marked as
[ThreadStatic]
(which obviously isn't the case here).Yes, generally speaking,
lock
onstatic
objects protect data for all instances of your class.From MSDN:
Yes. A derived class does not get a new copy of the static data from the base class.
However, this is not the case with generic classes. If you say:
instances of Derived1 and Derived2 have the same sync object. Instances of Derived3 and Derived4 have the same sync object. Instances of Derived5 and Derived6 have the same sync object. But the three sync objects are all different objects.