예제 #1
0
        internal void SignalInterruptsDisabled()
        {
            CompilerIntrinsics.Cli(); // TODO: superfluous
            capacity++;
            Thread t = waiters.Dequeue();

            if (t != null)
            {
                ThreadQueue ready = Kernel.kernel.readyQueue;
                ready.Enqueue(t);
                Kernel.kernel.EnqueueAndYield(ready);
            }
        }
예제 #2
0
 public void Signal()
 {
     try
     {
         CompilerIntrinsics.Cli();
         capacity++;
         Thread t = waiters.Dequeue();
         if (t != null)
         {
             ThreadQueue ready = Kernel.kernel.readyQueue;
             ready.Enqueue(t);
             Kernel.kernel.EnqueueAndYield(ready);
         }
     }
     finally
     {
         CompilerIntrinsics.Sti();
     }
 }
예제 #3
0
 internal Semaphore(ThreadQueue waiters, int capacity)
 {
     this.waiters  = waiters;
     this.capacity = capacity;
 }
예제 #4
0
 internal WakeUp(long time, Thread thread, ThreadQueue queue)
 {
     this.time   = time;
     this.thread = thread;
     this.queue  = queue;
 }