Mercurial > pub > ImplabNet
diff Implab/Parallels/Signal.cs @ 128:6241bff0cd64 v2
Added Signal class a lightweight alternative to ManualResetEvent
author | cin |
---|---|
date | Thu, 29 Jan 2015 05:09:31 +0300 |
parents | |
children | 471f596b2603 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Implab/Parallels/Signal.cs Thu Jan 29 05:09:31 2015 +0300 @@ -0,0 +1,31 @@ +using System; +using System.Threading; + +namespace Implab.Parallels { + /// <summary> + /// Implements simple signalling logic using <see cref="Monitor.PulseAll(object)"/>. + /// </summary> + public class Signal { + readonly object m_lock = new object(); + bool m_state; + + public void Set() { + lock(m_lock) { + m_state = true; + Monitor.PulseAll(m_lock); + } + } + + public void Wait() { + lock (m_lock) + if (!m_state) + Monitor.Wait(m_lock); + } + + public bool Wait(int timeout) { + lock (m_lock) + return m_state || Monitor.Wait(m_lock, timeout); + } + } +} +