Как протестировать, если поток содержит блокировку на объекте в C#?

Существует ли способ протестировать, если текущий поток содержит монитор, соединяют объект? Т.е. эквивалент Thread.holdsLock в Java.

Спасибо,

12
задан theburningmonk 9 March 2010 в 09:37
поделиться

2 ответа

Я не верю, что есть. Есть несколько уродливых хакерских приемов, например вызов Monitor.Wait (monitor, 0) и перехват исключения SynchronizationLockException , но это довольно ужасно (и теоретически может «поймать» импульс, который другой ждали нить).

Боюсь, я предлагаю вам переделать дизайн, чтобы он вам не понадобился.

РЕДАКТИРОВАТЬ: В .NET 4.5 это доступно с помощью Monitor.IsEntered .

14
ответ дан 2 December 2019 в 20:40
поделиться

Соответствующая информация хранится в структуре SyncBlock, используемой средой CLR, и может быть просмотрена во время отладки, например, с помощью WinDbg + sos. Насколько мне известно, нет никакого способа получить информацию из управляемого кода, но это может быть возможно из небезопасного кода, предполагая, что вы можете каким-то образом (и надежным образом) получить указатель на соответствующие данные, используемые средой CLR.

1
ответ дан 2 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: