internal void UnDelayThread(Thread thread) { Debug.Assert(thread.State == ThreadState.Wait); using (ProcessorCriticalSection.Acquire()) { var scheduleEntry = thread.ScheduleEntry; scheduleEntry.List !.Remove(scheduleEntry); _readyThreads.AddLast(scheduleEntry); scheduleEntry.Value.Thread.State = ThreadState.Ready; } }
internal void KillThread(Thread thread) { Debug.Assert(thread._scheduler == this); using (ProcessorCriticalSection.Acquire()) { if (Interlocked.Exchange(ref thread._scheduler, null) != null) { RemoveThreadFromReadyList(thread); thread.State = ThreadState.Terminated; thread.OnKilled(); } } }