Yes, you can use the same lock object (it's technically a monitor in the computer science sense, and is implemented with calls to methods in System.Monitor) in two different methods.
So, say that you had some static resource r
, and you wanted two threads to access that resource, but only one thread can use it at a time (this is the classic goal of a lock). Then you would write code like
public class Foo
{
private static object _LOCK = new object();
public void Method1()
{
lock (_LOCK)
{
// Use resource r
}
}
public void Method2()
{
lock (_LOCK)
{
// Use resource r
}
}
}
You need to lock around every use of r
in your program, since otherwise two threads can use r
at the same time. Furthermore, you must use the same lock, since otherwise again two threads would be able to use r
at the same time. So, if you are using r
in two different methods, you must use the same lock from both methods.
EDIT: As @diev points out in the comments, if the resource were per-instance on objects of type Foo
, we would not make _LOCK
static, but would make _LOCK
instance-level data.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…