Files
CppNet/common/structure/thread_safe_queue.h
2021-04-07 18:45:00 +08:00

59 lines
1.2 KiB
C++

// Use of this source code is governed by a BSD 3-Clause License
// that can be found in the LICENSE file.
// Author: caozhiyi (caozhiyi5@gmail.com)
#ifndef COMMON_STRUCTURE_THREAD_SAFE_QUEUE
#define COMMON_STRUCTURE_THREAD_SAFE_QUEUE
#include <mutex>
#include <queue>
namespace cppnet {
template<typename T>
class ThreadSafeQueue {
public:
ThreadSafeQueue() {}
~ThreadSafeQueue() {}
void Push(const T& element) {
std::unique_lock<std::mutex> lock(_mutex);
_queue.push(element);
}
bool Pop(T& value) {
std::unique_lock<std::mutex> lock(_mutex);
if (_queue.empty()) {
return false;
}
value = std::move(_queue.front());
_queue.pop();
return true;
}
void Clear() {
std::unique_lock<std::mutex> lock(_mutex);
while (!_queue.empty()) {
_queue.pop();
}
}
size_t Size() {
std::unique_lock<std::mutex> lock(_mutex);
return _queue.size();
}
bool Empty() {
std::unique_lock<std::mutex> lock(_mutex);
return _queue.empty();
}
private:
std::queue<T> _queue;
std::mutex _mutex;
};
}
#endif