Нет. Просто напишите код:
private int lockOwner;
private object lockObject = new object();
...
void foo() {
lock(lockObject) {
lockOwner = Thread.CurrentThread.ManagedThreadId;
// etc..
}
}
Есть другой недокументированный способ получить владельца блокировки, он не гарантированно работает, но обычно работает. Когда у вас есть активная точка останова, используйте Debug + Windows + Memory + Memory1. В поле ввода адреса введите имя объекта блокировки («lockObject») и нажмите Enter. Адресное поле меняется на адрес объекта в памяти. Отредактируйте его и добавьте «-4» к адресу, нажмите Enter. Первые 4 байта в дампе дают вам ManagedThreadId в шестнадцатеричном формате. Это работает для 32-битного кода, если вы никогда не вызывали GetHashCode для объекта блокировки. Что, конечно, не стоит.