public void SignalObject(KSynchronizationObject SyncObj) { System.CriticalSection.Enter(); if (SyncObj.IsSignaled()) { LinkedListNode <KThread> Node = SyncObj.WaitingThreads.First; while (Node != null) { KThread Thread = Node.Value; if ((Thread.SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.Paused) { Thread.SignaledObj = SyncObj; Thread.ObjSyncResult = 0; Thread.Reschedule(ThreadSchedState.Running); } Node = Node.Next; } } System.CriticalSection.Leave(); }
public void SignalObject(KSynchronizationObject syncObj) { _system.CriticalSection.Enter(); if (syncObj.IsSignaled()) { LinkedListNode <KThread> node = syncObj.WaitingThreads.First; while (node != null) { KThread thread = node.Value; if ((thread.SchedFlags & ThreadSchedState.LowMask) == ThreadSchedState.Paused) { thread.SignaledObj = syncObj; thread.ObjSyncResult = 0; thread.Reschedule(ThreadSchedState.Running); } node = node.Next; } } _system.CriticalSection.Leave(); }