public void UpdatePriority() { int OldPriority = ActualPriority; int CurrPriority = WantedPriority; lock (Process.ThreadSyncLock) { foreach (KThread Thread in MutexWaiters) { if (CurrPriority > Thread.WantedPriority) { CurrPriority = Thread.WantedPriority; } } } if (CurrPriority != OldPriority) { ActualPriority = CurrPriority; Process.Scheduler.Resort(this); MutexOwner?.UpdatePriority(); } }
private void UpdatePriorityInheritance() { //If any of the threads waiting for the mutex has //higher priority than the current thread, then //the current thread inherits that priority. int HighestPriority = BasePriority; if (MutexWaiters.First != null) { int WaitingDynamicPriority = MutexWaiters.First.Value.DynamicPriority; if (WaitingDynamicPriority < HighestPriority) { HighestPriority = WaitingDynamicPriority; } } if (HighestPriority != DynamicPriority) { int OldPriority = DynamicPriority; DynamicPriority = HighestPriority; AdjustSchedulingForNewPriority(OldPriority); if (MutexOwner != null) { //Remove and re-insert to ensure proper sorting based on new priority. MutexWaiterNode.List.Remove(MutexWaiterNode); MutexOwner.AddToMutexWaitersList(this); } } }
public void UpdatePriority() { bool PriorityChanged; lock (Process.ThreadSyncLock) { int OldPriority = ActualPriority; int CurrPriority = WantedPriority; foreach (KThread Thread in MutexWaiters) { int WantedPriority = Thread.WantedPriority; if (CurrPriority > WantedPriority) { CurrPriority = WantedPriority; } } PriorityChanged = CurrPriority != OldPriority; ActualPriority = CurrPriority; } if (PriorityChanged) { Process.Scheduler.Resort(this); MutexOwner?.UpdatePriority(); } }
public void UpdatePriority() { int OldPriority = ActualPriority; int CurrPriority = WantedPriority; if (NextMutexThread != null && CurrPriority > NextMutexThread.WantedPriority) { CurrPriority = NextMutexThread.WantedPriority; } if (CurrPriority != OldPriority) { ActualPriority = CurrPriority; UpdateWaitList(); MutexOwner?.UpdatePriority(); } }