Files
winsock2_wrapper/pool.hpp
T

45 lines
895 B
C++
Raw Normal View History

2026-04-03 20:51:58 +08:00
#include <thread>
#include <mutex>
#include <future>
#include <atomic>
#include <condition_variable>
#include <memory>
2026-06-25 15:07:55 +08:00
#include <type_traits>
2026-04-03 20:51:58 +08:00
template <typename T>
2026-06-25 15:07:55 +08:00
struct QNode {
2026-04-03 20:51:58 +08:00
std::unique_ptr<T> payload;
2026-06-25 15:07:55 +08:00
volatile std::atomic<QNode*> next;
QNode() = default;
explicit QNode(T&& payload):
payload(std::forward<T>(payload)) {}
2026-04-03 20:51:58 +08:00
};
template <typename T>
2026-06-25 15:07:55 +08:00
class Queue {
private:
volatile std::atomic<QNode<T>*> head;
volatile std::atomic<QNode<T>*> tail;
public:
void push(T&& payload) {
QNode<T>* node = new QNode(std::forward<T>(payload));
node->next = node;
2026-04-03 20:51:58 +08:00
2026-06-25 15:07:55 +08:00
QNode<T>* _tail = tail;
QNode<T>* _next = _tail->next;
do {
node->next = _next;
} while (!_tail->next.compare_exchange_weak(_next, node));
tail.compare_exchange_strong(_tail, node);
}
std::unique_ptr<T> pop() {
}
};