summaryrefslogtreecommitdiff
path: root/src/common/threadsafe_queue.h
diff options
context:
space:
mode:
authorGravatar bunnei2021-04-09 11:52:18 -0700
committerGravatar GitHub2021-04-09 11:52:18 -0700
commitd6e5e053a6c4fe8538d4b97b8f5a1eba61e2fcac (patch)
tree71dafa020afef119e3d3b57e22ca14f4ba42d9d8 /src/common/threadsafe_queue.h
parentMerge pull request #6164 from Morph1984/service-update-12.x (diff)
parentvideo_core: Use a CV for blocking commands. (diff)
downloadyuzu-d6e5e053a6c4fe8538d4b97b8f5a1eba61e2fcac.tar.gz
yuzu-d6e5e053a6c4fe8538d4b97b8f5a1eba61e2fcac.tar.xz
yuzu-d6e5e053a6c4fe8538d4b97b8f5a1eba61e2fcac.zip
Merge pull request #6162 from degasus/no_spin_loops
video_core: Avoid spin loops.
Diffstat (limited to 'src/common/threadsafe_queue.h')
-rw-r--r--src/common/threadsafe_queue.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/common/threadsafe_queue.h b/src/common/threadsafe_queue.h
index a4647314a..ad04df8ca 100644
--- a/src/common/threadsafe_queue.h
+++ b/src/common/threadsafe_queue.h
@@ -83,11 +83,15 @@ public:
83 return true; 83 return true;
84 } 84 }
85 85
86 T PopWait() { 86 void Wait() {
87 if (Empty()) { 87 if (Empty()) {
88 std::unique_lock lock{cv_mutex}; 88 std::unique_lock lock{cv_mutex};
89 cv.wait(lock, [this]() { return !Empty(); }); 89 cv.wait(lock, [this]() { return !Empty(); });
90 } 90 }
91 }
92
93 T PopWait() {
94 Wait();
91 T t; 95 T t;
92 Pop(t); 96 Pop(t);
93 return t; 97 return t;
@@ -156,6 +160,10 @@ public:
156 return spsc_queue.Pop(t); 160 return spsc_queue.Pop(t);
157 } 161 }
158 162
163 void Wait() {
164 spsc_queue.Wait();
165 }
166
159 T PopWait() { 167 T PopWait() {
160 return spsc_queue.PopWait(); 168 return spsc_queue.PopWait();
161 } 169 }