04C++11多线程编程之创建多个线程和数据共享问题分析

04C++11多线程编程之创建多个线程和数据共享问题分析

1 thread循环创建多个子线程
思想就是使用容器创建多个线程,推荐,以后工作中会使用到,具有实际意义,方便统一管理线程。

#include<iostream>
#include<thread>
#include<string>
#include<vector>

using namespace std;


void MyPrint(int i) {
	cout << "my tid = " << this_thread::get_id() << endl;
}


int main(){

	//使用容器创建多个线程,推荐,以后工作中会使用到,具有实际意义,方便统一管理线程
	vector<thread> vTh;
	for (auto i = 0; i < 10; i++) {
		vTh.push_back(thread(MyPrint, i));
	}

	for (auto vit = vTh.begin(); vit != vTh.end(); vit++) {
		if (vit->joinable()) {
			vit->join();
		}
	}

	cout << "回收子线程完成" << endl;

	return 0;
}

结果如下,混乱是因为线程竞争CPU时间分片的原因。
在这里插入图片描述

2 数据共享问题分析
这个很简单,我就不使用代码分析了。注:共享都是指多线程下。
1)只读:不需要做任何处理,都是安全的。
2)有读有写:必须加锁或者其它同步处理,使其安全的访问。否则轻则数据读取的值未知,重则程序崩溃。例如普通全局变量的值未保护,多个线程访问的时候就会可能出现负很大的数;或者是全局vector容器,不作保护并且有删除元素或者push,pop等操作,其它线程此时同样访问该迭代器都会可能出现崩溃,特别是删除。具体可以看我STL容器的文章看。
3)只有写:一般不会只有写,因为都是先读即先判断在确定是否写。

但是说很简单,保护起来就非常的困难了。需要大量的工作经验积累。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值