Commit 183b8ad7 by Ben Clayton

Simplify sw::Chan

Remove the 'removed' condition_variable field. It is not used. Don't bother copying and unlocking before returning a field - this is not required. Bug: b/133127573 Change-Id: Ic8e29e6b6008e16b6abd043ccfa9014e203ce69a Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31678 Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: 's avatarBen Clayton <headlessclayton@gmail.com> Reviewed-by: 's avatarAntonio Maiorano <amaiorano@google.com> Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent ed01f2c3
...@@ -52,7 +52,6 @@ private: ...@@ -52,7 +52,6 @@ private:
std::queue<T> queue; std::queue<T> queue;
std::mutex mutex; std::mutex mutex;
std::condition_variable added; std::condition_variable added;
std::condition_variable removed;
}; };
template <typename T> template <typename T>
...@@ -62,15 +61,10 @@ template <typename T> ...@@ -62,15 +61,10 @@ template <typename T>
T Chan<T>::take() T Chan<T>::take()
{ {
std::unique_lock<std::mutex> lock(mutex); std::unique_lock<std::mutex> lock(mutex);
if (queue.size() == 0) // Wait for item to be added.
{ added.wait(lock, [this] { return queue.size() > 0; });
// Chan empty. Wait for item to be added.
added.wait(lock, [this] { return queue.size() > 0; });
}
T out = queue.front(); T out = queue.front();
queue.pop(); queue.pop();
lock.unlock();
removed.notify_one();
return out; return out;
} }
...@@ -84,8 +78,6 @@ std::pair<T, bool> Chan<T>::tryTake() ...@@ -84,8 +78,6 @@ std::pair<T, bool> Chan<T>::tryTake()
} }
T out = queue.front(); T out = queue.front();
queue.pop(); queue.pop();
lock.unlock();
removed.notify_one();
return std::make_pair(out, true); return std::make_pair(out, true);
} }
...@@ -102,9 +94,7 @@ template <typename T> ...@@ -102,9 +94,7 @@ template <typename T>
size_t Chan<T>::count() size_t Chan<T>::count()
{ {
std::unique_lock<std::mutex> lock(mutex); std::unique_lock<std::mutex> lock(mutex);
auto out = queue.size(); return queue.size();
lock.unlock();
return out;
} }
} // namespace sw } // namespace sw
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment