Signal.cs
30 lines
| 723 B
| text/x-csharp
|
CSharpLexer
cin
|
r295 | using System.Threading; | ||
cin
|
r289 | |||
namespace Implab.Parallels { | ||||
/// <summary> | ||||
/// Implements a 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); | ||||
} | ||||
} | ||||
} | ||||