mirror of
https://github.com/caozhiyi/CppNet.git
synced 2026-01-12 00:19:01 +08:00
59 lines
1.2 KiB
C++
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 |