问题描述
在学习多线程并发的课程中,遇到了如下的问题:
使用两个子线程,分别对数据进行读取和写入,期望的结果是出现编译器报错,但是没有。暂时没有分析出原因。源码如下:
#include<iostream>
#include<thread>
#include<vector>
#include<list>
using namespace std;
class A
{
public:
//接受消息的线程
void InMsg()
{
for (int i = 0; i < 1000; i++)
{
cout << "InMsg():正在插入数字" << i << endl;
lst_Msg.push_back(i);
}
}
//取出消息的线程
void OutMsg()
{
if (!lst_Msg.empty())
{
int command;
for (int i = 0; i < lst_Msg.size(); i++)
{
cout << "InMsg()执行:正在从list中取出第一个元素" << endl;
command = lst_Msg.front();//返回list第一个元素,不删除。
lst_Msg.pop_front();//删除第一个元素。
}
}
else
{
cout << "此队为空" << endl;
}
}
private:
list<int> lst_Msg; //存放消息的list。
};
void main()
{
A a;
thread InMsg(&A::InMsg, &a);//第二个参数为引用类型
thread OutMsg(&A::OutMsg, &a);
InMsg.join();
OutMsg.join();
cout << "这是主线程的输出" << endl;
system("pause");
}
问题出处
共享数据的保护代码案例:
c++11并发于多线程_2章_4节 P6 - 28:49
到
c++11并发于多线程_2章_4节 P6 - 50:10
B站的这个老师举了一个例子,但是按照这个例子并不会出现期待的错误提示信息。