What you lock onintermediate
Lock on something only your class can reach: locking on the instance, a type, or a string literal hands the lock to the whole process, and a stranger can deadlock you from code you have never read.
lock(this), lock(typeof(T)) and lock("key"). Three ways to let a stranger deadlock you.
Every lock is on a private object, with a static gate for the static field.
Published in full, before you start — every point is one of these and there is nothing else.
Lock on something only your class can reach: locking on the instance, a type, or a string literal hands the lock to the whole process, and a stranger can deadlock you from code you have never read.