学习c++多线程并发

问题描述

在学习多线程并发的课程中,遇到了如下的问题:
使用两个子线程,分别对数据进行读取和写入,期望的结果是出现编译器报错,但是没有。暂时没有分析出原因。源码如下:

#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站的这个老师举了一个例子,但是按照这个例子并不会出现期待的错误提示信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值