#include "pch.h"
#include <iostream>
#include <thread>
#include <list>
#include <mutex>
using namespace std;
class A {
public:
void inMsgRecvQueue()//将数据加入队列的线程
{
for (int i = 0; i < 10000; i++)
{
cout << "插入一个元素" << i << endl;
lock_guard<mutex> haha(my_mutex);
//my_mutex.lock();
msgRecvQueue.push_back(i);
//my_mutex.unlock();
}
}
bool outMsgProc(int &command)
{
lock_guard<mutex> haha(my_mutex);
//my_mutex.lock();
if (!msgRecvQueue.empty())
{
int command = msgRecvQueue.front();
msgRecvQueue.pop_front();
//my_mutex.unlock();
return true;
}
//my_mutex.unlock();
return false;
}
void outMsgRecvQueue()//把数据从队列中取出的线程
{
int com = 0;
for (int i = 0; i < 10000; i++)
{
bool ans=outMsgProc(com);
if (ans)
{
cout << "取出一个元素" << ans << endl;
}
else {
cout << "队列是null的"<< endl;
}
}
cout << "取出结束"<<endl;
}
private:
list<int> msgRecvQueue;//消息队列
mutex my_mutex;
};
int main()
{
A myobj;
thread myobj1(&A::inMsgRecvQueue, &myobj);//第二个参数必须是引用,才能保证线程中用的是一个对象。
thread myobj2(&A::outMsgRecvQueue, &myobj);
myobj1.join();
myobj2.join();
return 0;
}
cpp使用互斥量保护有读有写数据,测试代码
最新推荐文章于 2024-09-16 17:46:36 发布