Skip to content
Snippets Groups Projects

[LockedUnboundedQueue] use a std::shared_mutex instead of std::mutex

Closed Florian Fischer requested to merge aj46ezos/emper:std_shared_mutex into master
Files
4
@@ -2,26 +2,33 @@
// Copyright © 2020 Florian Schmaus
#pragma once
#include <mutex>
#include <queue>
#include <shared_mutex>
namespace lib::adt {
template <typename I>
class LockedUnboundedQueue {
private:
std::mutex queue_mutex;
std::shared_mutex queue_mutex;
std::queue<I*> queue;
public:
void enqueue(I* item) {
std::lock_guard<std::mutex> lock(queue_mutex);
std::unique_lock lock(queue_mutex);
queue.push(item);
}
auto dequeue() -> I* {
std::lock_guard<std::mutex> lock(queue_mutex);
{
std::shared_lock lock(queue_mutex);
if (queue.empty()) {
return nullptr;
}
}
std::unique_lock lock(queue_mutex);
if (queue.empty()) {
return nullptr;
}
Loading