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); } }
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(); } }
internal Semaphore(ThreadQueue waiters, int capacity) { this.waiters = waiters; this.capacity = capacity; }
internal WakeUp(long time, Thread thread, ThreadQueue queue) { this.time = time; this.thread = thread; this.queue = queue; }