public Semaphore(int initialCount, int maximumCount) { if (initialCount > maximumCount) { throw new ArgumentException("initialCount must be <= maximumCount"); } if (maximumCount < 1) { throw new ArgumentOutOfRangeException("maximumCount", "maximumCount must be > 0"); } if (initialCount < 0) { throw new ArgumentOutOfRangeException("initialCount", "initialCount must be >= 0"); } m_currentCount = initialCount; m_maximumCount = maximumCount; #if USE_FAST_EVENT m_gate = new FastEvent(true, m_currentCount > 0); #else m_gate = new CEvent(true, m_currentCount > 0); #endif waitObject = m_gate; }