Mercurial > pub > ImplabNet
comparison 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 |
comparison
equal
deleted
inserted
replaced
127:d86da8d2d4c3 | 128:6241bff0cd64 |
---|---|
1 using System; | |
2 using System.Threading; | |
3 | |
4 namespace Implab.Parallels { | |
5 /// <summary> | |
6 /// Implements simple signalling logic using <see cref="Monitor.PulseAll(object)"/>. | |
7 /// </summary> | |
8 public class Signal { | |
9 readonly object m_lock = new object(); | |
10 bool m_state; | |
11 | |
12 public void Set() { | |
13 lock(m_lock) { | |
14 m_state = true; | |
15 Monitor.PulseAll(m_lock); | |
16 } | |
17 } | |
18 | |
19 public void Wait() { | |
20 lock (m_lock) | |
21 if (!m_state) | |
22 Monitor.Wait(m_lock); | |
23 } | |
24 | |
25 public bool Wait(int timeout) { | |
26 lock (m_lock) | |
27 return m_state || Monitor.Wait(m_lock, timeout); | |
28 } | |
29 } | |
30 } | |
31 |