1234567891011121314151617181920212223242526272829303132 |
- using System;
- using System.Threading;
- namespace WinSCP
- {
- public class Lock
- {
- public void Enter()
- {
- Monitor.Enter(_lock);
- if (_locked)
- {
- Monitor.Exit(_lock);
- throw new InvalidOperationException("Recursive calls not allowed");
- }
- _locked = true;
- }
- public void Exit()
- {
- if (!_locked)
- {
- throw new InvalidOperationException("Not locked");
- }
- _locked = false;
- Monitor.Exit(_lock);
- }
- private readonly object _lock = new object();
- private bool _locked;
- }
- }
|