栈
class ThreadSafeLinkedStack { private: struct Node { T data; std::shared_ptr<Node> next; Node(T data) : data(data), next(nullptr) {} }; std::shared_ptr<Node> top; mutable std::mutex mtx; // 用于保护对top的访问 private: std::shared_ptr<Node> pop_unsafe() { std::shared_ptr<Node> old_top = top; if (old_top) { top = old_top->next; } return old_top; } public: ThreadSafeLinkedStack() : top(nullptr) {} ~ThreadSafeLinkedStack() { while (top) { pop_unsafe(); } } T top() const { std::lock_guard<std::mutex> lock(mtx); if (!top) { throw std::out_of_range("Stack is empty!"); } return top->data; } void push(T data) { std::lock_guard<std::mutex> lock(mtx); std::shared_ptr<Node> new_node = std::make_shared<Node>(data); new_node->next = std::move(top); top = std::move(new_node); } void pop() { std::lock_guard<std::mutex> lock(mtx); if (!top) { throw std::out_of_range("Stack is empty!"); } pop_unsafe(); } }; // 可改成读写锁 top处理是读锁,push和pop是写锁