Why is this an issue?
Shared resources should not be used for locking as it increases the chance of deadlocks. Any other thread could acquire (or attempt to acquire) the
same lock for another unrelated purpose.
Instead, a dedicated object
instance should be used for each shared resource, to avoid deadlocks or lock contention.
The following objects are considered as shared resources:
-
this
- a
Type
object
- a string literal
- a string instance
Noncompliant code example
public void MyLockingMethod()
{
lock (this) // Noncompliant
{
// ...
}
}
Compliant solution
private readonly object lockObj = new object();
public void MyLockingMethod()
{
lock (lockObj)
{
// ...
}
}
Resources
Microsoft Documentation: Managed Threading
Best Practices