简单的队列模版类处理线程间的数据同步问题(数据处理时间固定)

#include <iostream>

#include <string>

#include <vector>

#include <math.h>

#include <sstream>

#include <thread>

#include <queue>

#include <mutex>

#include <ctime>

 

using namespace std;

vector<int> nums1;

vector<int> nums2;

vector<int> new_nums;

string str="gazbvvbzagba";

 

template <class T>

 

 

class  m_queue {

    

private:

    queue<T> q;

    mutex mut;

    

public:

    m_queue(){}

    ~m_queue(){}

    void insert(T data)

    {

        lock_guard<mutex> lk(mut);

        q.push(move(data));

        cout<<"insert data:"<<data<<endl;   //数据类型为指针时cout<<"insert data:"<<*data<<endl;

        this_thread::sleep_for(chrono::milliseconds(500));

    }

    

    T process_data()

    {

        if(q.empty())

        {

            return 0;

        }

        lock_guard<mutex> lk(mut);

        T t=q.front();

        cout<<"Pop data:"<<t<<endl; //*t

        q.pop();

        this_thread::sleep_for(chrono::milliseconds(500));

        return t;

    }

};

m_queue<int> q2;   //数据类型为指针类型的情况   m_queue<int*> q2;

void fun1()

{

    while(true)

    {

        for(int i=0;i<100;i++)

        {

/*数据类型为指针时:

int *p=&i;

q2.insert(p);

*/

            q2.insert(i);

            this_thread::sleep_for(chrono::milliseconds(1));

        }

        

    }

}

void fun2()

{

    while(true)

    {

        for(int i=0;i<100;i++)

        {

            q2.process_data();

            this_thread::sleep_for(chrono::milliseconds(1));

        }

    }

}

 

int main()

{

    m_queue<int> q1;

    thread t1(fun1);

    thread t2(fun2);

    t1.join();

    t2.join();

    return 0;

    

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

究极调参工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值