diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp
index 6032cb0bf..241971ff3 100644
--- a/src/core/cpu_manager.cpp
+++ b/src/core/cpu_manager.cpp
@@ -80,9 +80,10 @@ void CpuManager::RunGuestThread() {
     }
     while (true) {
         auto& physical_core = kernel.CurrentPhysicalCore();
-        if (!physical_core.IsInterrupted()) {
+        while (!physical_core.IsInterrupted()) {
             physical_core.Run();
         }
+        physical_core.ClearExclusive();
         auto& scheduler = physical_core.Scheduler();
         scheduler.TryDoContextSwitch();
     }
diff --git a/src/core/hle/kernel/physical_core.cpp b/src/core/hle/kernel/physical_core.cpp
index 69202540b..ff14fcb42 100644
--- a/src/core/hle/kernel/physical_core.cpp
+++ b/src/core/hle/kernel/physical_core.cpp
@@ -45,6 +45,9 @@ PhysicalCore::~PhysicalCore() = default;
 
 void PhysicalCore::Run() {
     arm_interface->Run();
+}
+
+void PhysicalCore::ClearExclusive() {
     arm_interface->ClearExclusiveState();
 }
 
diff --git a/src/core/hle/kernel/physical_core.h b/src/core/hle/kernel/physical_core.h
index c3da30b72..cd2e42fc3 100644
--- a/src/core/hle/kernel/physical_core.h
+++ b/src/core/hle/kernel/physical_core.h
@@ -38,6 +38,8 @@ public:
 
     /// Execute current jit state
     void Run();
+    /// Clear Exclusive state.
+    void ClearExclusive();
     /// Set this core in IdleState.
     void Idle();
     /// Execute a single instruction in current jit.