Мне любопытно узнать, почему вы бы звонили Monitor.Enter
несколько раз без равного количества звонков на Monitor.Exit
.Обычно любой такой код синхронизации будет выглядеть следующим образом:
try
{
Monitor.Enter(lockObject);
// some code that needs to be synchronized
}
finally
{
Monitor.Exit(lockObject);
}
Предполагается, что вы используете try
/ finally
везде, где вы получаете блокировку с использованием Monitor.Enter
(что для вас должно быть), Я не могу понять, зачем вам нужен этот "блокирующий один раз" класс, о котором вы спрашиваете.
На самом деле, вам все равно в принципе никогда не придется делать это самостоятельно, так как гораздо более простой подходв сущности, это то же самое, что использовать выражение lock
:
lock (lockObject)
{
// some code that needs to be synchronized
}
Тем не менее, я могу просто что-то упустить.