private object someLock = new object(); ... // Here we need to execute something within a Timeout period // but we could exceed the timeout just waiting for the lock on our object! algo = null; int start = System.Environment.TickCount; bool lockAquired = Monitor.TryEnter(someLock, timeout); if (lockAquired) { try { int elapsedTime = (System.Environment.TickCount-start); // Did we use any time up waiting for the lock? Take it off the original timeout // new timeout = original timeout - time expired obtaining the lock int timeLeft = timeout - elapsedTime; if (timeLeft > 0) { DoSomething(timeLeft, out algo); } } finally { Monitor.Exit(someLock); } }
March 16, 2006
Manual Locking With Monitors
When we want to use a timed 'lock' we can not use the normal lock statement, we have to use the monitor directly.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment