实现一个多线程的栈(队列是一个意思)

多线程的栈

#include <iostream>
#include <vector>
#include <mutex>
#include <thread>
#include <stack>
#include <exception>
using namespace std;

template<class T>
class MyStack{
public:
    MyStack()= default;
    //判断是否为空
    bool empty(){
        return m_stack.empty();
    }
    void push(const T data){
        lock_guard<mutex> l(m_mutex);
        m_stack.push(data);
    }
    T pop(){
        try{
            lock_guard<mutex> l(m_mutex);
            T data = m_stack.top();
            m_stack.pop();
            try{
                cout<<data<<endl;
            }catch(exception &e){
                cout<<e.what()<<endl;
            }
            return data;
        }catch (exception &e){
            cout<<e.what()<<endl;
        }
    }
private:
    stack<T> m_stack;
    mutex m_mutex;
};

int main() {
    shared_ptr<MyStack<int>> ptr = make_shared<MyStack<int>>();
    thread t1([&](){ptr->push(1);});
    thread t2([&](){ptr->push(2);});
    thread t3([&](){ptr->push(3);});
    thread t4([&](){ptr->push(4);});
    thread t5([&](){ptr->pop();});
    thread t6([&](){ptr->pop();});
    thread t7([&](){ptr->pop();});
    thread t8([&](){ptr->pop();});
    t1.join();
    t2.join();
    t3.join();
    t4.join();
    t5.join();
    t6.join();
    t7.join();
    t8.join();
    return 0;
}
posted @   蘑菇王国大聪明  阅读(68)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示