Signal.cs
31 lines
| 737 B
| text/x-csharp
|
CSharpLexer
cin
|
r128 | using System; | ||
using System.Threading; | ||||
namespace Implab.Parallels { | ||||
/// <summary> | ||||
cin
|
r129 | /// Implements a simple signalling logic using <see cref="Monitor.PulseAll(object)"/>. | ||
cin
|
r128 | /// </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); | ||||
} | ||||
} | ||||
} | ||||