WakeUp() public method

public WakeUp ( ) : void
return void
 public void Exit()
 {
     if (m_suspendedThreads.Count > 0)
     {
         MicroThread t = m_suspendedThreads.Dequeue();
         t.WakeUp();
     }
     m_locked = false;
 }
Example #2
0
        public void Increase()
        {
            Console.WriteLine("Semaphore:Increase {0} -> {1}", m_value, m_value + 1);

            m_value++;

            if (m_value <= 0)
            {
                MicroThread t = m_suspendedThreads.Dequeue();
                t.WakeUp();
            }
        }
        public T Receive()
        {
            MicroThread t = MicroThread.CurrentThread;

            if (m_senders.Count == 0)
            {
                m_receivers.Enqueue(t);
                t.Wait();
            }
            else
            {
                MicroThread sender = m_senders.Dequeue();
                sender.WakeUp();
            }

            return(m_dataQueue.Dequeue());
        }
        public void Send(T data)
        {
            MicroThread t = MicroThread.CurrentThread;

            m_dataQueue.Enqueue(data);

            if (m_receivers.Count == 0)
            {
                m_senders.Enqueue(t);
                t.Wait();
            }
            else
            {
                MicroThread receiver = m_receivers.Dequeue();
                receiver.WakeUp();
                t.Yield();
            }
        }