C++11初始thread库

本文介绍了C++11引入的线程库thread,通过一个例子展示了多线程环境下共享数据操作的安全问题。针对这个问题,提出了两种解决方案:1) 使用unique_lock进行加锁处理,确保线程安全,但可能引发死锁并降低效率;2) 利用C++11的原子操作atomic,提供线程安全且高效的共享数据访问。
摘要由CSDN通过智能技术生成

在C++中,支持了多线程,下面就来学习一下C++中的线程库thread:

先来看下面的代码:

#include <thread>
#include <atomic>
#include <mutex>
using namespace std;
unsigned long sum;

void fun(size_t num)
{
	
	for (size_t i = 0; i < num; i++)
	{		
		sum++;
	}
			
}
int main()
{
	thread t1(fun, 1000000);
	thread t2(fun, 1000000);
	//当这个数很大的时候,就可以看到多线程对共享数据的操作就会出错
	t1.join();//join用来等线程结束后,回收创建线程的资源
	t2.join();
	cout << sum << endl;
	return 0;
}

看到以下结果:对于我们预期的结果应该是t1对sum++1000000,t2对sum++1000000,应该得到2000000,但结果并不是

因为多线程对共享数据操作的时候,访问数据不安全(线程安全)的问题,导致了sum并没有按照预期的结果进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值