У меня есть объекты, они получают блокировки. Я хочу протестировать, если они заблокированы, не получая блокировку. Идея состоит в том если я TryEnter()
затем я имею к Exit()
если true
только проверять блокировку правильно.
Походит на действительно основной вопрос, как он сделан?
Какую возможную информацию вы можете получить, зная, что замок был разблокирован, когда вы на него смотрели? К тому времени, когда вы примете решение на основе этой информации, замок может быть уже взят.
Поскольку оператор блокировки эквивалентен:
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». Нет никакой гарантии, что он все равно будет разблокирован, когда функция вернется.