aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2018-09-18 20:36:43 -0300
committerGitHub <noreply@github.com>2018-09-18 20:36:43 -0300
commitb8133c19971c7a2026af803003fafedbdb70488e (patch)
tree84f4630e897ccd3f77b86051241a22a6cf45193d /Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
parent33e2810ef36fe0cf613aecd4c609f425aed02539 (diff)
Thread scheduler rewrite (#393)
* Started to rewrite the thread scheduler * Add a single core-like scheduling mode, enabled by default * Clear exclusive monitor on context switch * Add SetThreadActivity, misc fixes * Implement WaitForAddress and SignalToAddress svcs, misc fixes * Misc fixes (on SetActivity and Arbiter), other tweaks * Rebased * Add missing null check * Rename multicore key on config, fix UpdatePriorityInheritance * Make scheduling data MLQs private * nit: Ordering
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs36
1 files changed, 23 insertions, 13 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs b/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
index b83b0004..28eac330 100644
--- a/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
+++ b/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
@@ -1,28 +1,38 @@
-using System;
-using System.Threading;
+using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Kernel
{
- class KSynchronizationObject : IDisposable
+ class KSynchronizationObject
{
- public ManualResetEvent WaitEvent { get; private set; }
+ public LinkedList<KThread> WaitingThreads;
- public KSynchronizationObject()
+ protected Horizon System;
+
+ public KSynchronizationObject(Horizon System)
+ {
+ this.System = System;
+
+ WaitingThreads = new LinkedList<KThread>();
+ }
+
+ public LinkedListNode<KThread> AddWaitingThread(KThread Thread)
+ {
+ return WaitingThreads.AddLast(Thread);
+ }
+
+ public void RemoveWaitingThread(LinkedListNode<KThread> Node)
{
- WaitEvent = new ManualResetEvent(false);
+ WaitingThreads.Remove(Node);
}
- public void Dispose()
+ public virtual void Signal()
{
- Dispose(true);
+ System.Synchronization.SignalObject(this);
}
- protected virtual void Dispose(bool Disposing)
+ public virtual bool IsSignaled()
{
- if (Disposing)
- {
- WaitEvent.Dispose();
- }
+ return false;
}
}
} \ No newline at end of file