首页 > 编程语言 > 详细

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

时间:2021-09-02 00:36:44      阅读:19      评论:0      收藏:0      [点我收藏+]

多线程的栈

#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;
}

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

原文:https://www.cnblogs.com/yoshinb/p/15213171.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!