R-Type
Distributed multiplayer game engine in C++
Loading...
Searching...
No Matches
ThreadSafeQueue.hpp
Go to the documentation of this file.
1/*
2** EPITECH PROJECT, 2025
3** Created by mael on 08/12/2025.
4** File description:
5** ThreadSafeQueue.hpp
6*/
7
8#pragma once
9
10#include <condition_variable>
11#include <mutex>
12#include <optional>
13#include <queue>
14
24template <typename T>
26 public:
27 ThreadSafeQueue() = default;
28 ~ThreadSafeQueue() = default;
29
30 // Delete copy constructor and assignment
33
40 void push(T item) {
41 std::lock_guard<std::mutex> lock(_mutex);
42 _queue.push(std::move(item));
43 _cv.notify_one();
44 }
45
52 std::optional<T> tryPop() {
53 std::lock_guard<std::mutex> lock(_mutex);
54 if (_queue.empty()) {
55 return std::nullopt;
56 }
57 T item = std::move(_queue.front());
58 _queue.pop();
59 return item;
60 }
61
68 T pop() {
69 std::unique_lock<std::mutex> lock(_mutex);
70 _cv.wait(lock, [this] { return !_queue.empty(); });
71 T item = std::move(_queue.front());
72 _queue.pop();
73 return item;
74 }
75
82 bool empty() const {
83 std::lock_guard<std::mutex> lock(_mutex);
84 return _queue.empty();
85 }
86
93 size_t size() const {
94 std::lock_guard<std::mutex> lock(_mutex);
95 return _queue.size();
96 }
97
103 void clear() {
104 std::lock_guard<std::mutex> lock(_mutex);
105 std::queue<T> emptyQueue;
106 std::swap(_queue, emptyQueue);
107 }
108
109 private:
110 mutable std::mutex _mutex;
111 std::condition_variable _cv;
112 std::queue<T> _queue;
113};
Thread-safe queue for inter-thread communication.
T pop()
Pop an item, blocking until one is available.
void push(T item)
Push an item to the queue.
bool empty() const
Check if queue is empty.
ThreadSafeQueue & operator=(const ThreadSafeQueue &)=delete
~ThreadSafeQueue()=default
ThreadSafeQueue(const ThreadSafeQueue &)=delete
std::optional< T > tryPop()
Try to pop an item without blocking.
size_t size() const
Get queue size.
std::queue< T > _queue
void clear()
Clear all items from queue.
std::condition_variable _cv
ThreadSafeQueue()=default