Протестировать блокировку с получением его?

У меня есть объекты, они получают блокировки. Я хочу протестировать, если они заблокированы, не получая блокировку. Идея состоит в том если я TryEnter() затем я имею к Exit() если true только проверять блокировку правильно.

Походит на действительно основной вопрос, как он сделан?

9
задан Andrew Shepherd 29 July 2018 в 22:49
поделиться

2 ответа

Какую возможную информацию вы можете получить, зная, что замок был разблокирован, когда вы на него смотрели? К тому времени, когда вы примете решение на основе этой информации, замок может быть уже взят.

22
ответ дан 4 December 2019 в 07:35
поделиться

Поскольку оператор блокировки эквивалентен:

System.Threading.Monitor.Enter(x);
try {
   ...
}
finally {
   System.Threading.Monitor.Exit(x);
}

Вы можете просто сделать это?

bool ObjectWasUnlocked(object x)
{
   if(System.Threading.Monitor.TryEnter(x))
   {
       System.Threading.Monitor.Exit(x);
       return true;
   }
   else
   {
       return false;
   }
}

Обратите внимание, что я называю эту функцию «Объект был разблокирован», а не «ObjectIsUnlocked». Нет никакой гарантии, что он все равно будет разблокирован, когда функция вернется.

3
ответ дан 4 December 2019 в 07:35
поделиться
Другие вопросы по тегам:

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