public void Decrease() { Console.WriteLine("Semaphore:Decrease {0} -> {1}", m_value, m_value - 1); m_value--; if (m_value < 0) { MicroThread t = MicroThread.CurrentThread; m_suspendedThreads.Enqueue(t); t.Wait(); } }