C++ 多线程、锁、临界区、自解锁与原子操作

C++11引入线程库,通过创建线程函数实现多线程。多线程抢占式执行时,需使用锁保护临界区资源,防止打印等操作乱序。自解锁能确保临界区资源在对象生命周期结束后自动释放,解决未解锁问题。原子操作提供不可分割的CPU操作,适用于简单共享操作,提高效率并保证安全性。在多线程中,原子类型是共享基本数据类型的安全选择。
摘要由CSDN通过智能技术生成

C++ 11 引入了线程库, #include <thread>
一般简单的,编写一个线程执行的函数,传递给thread去开启线程,就可以简单的实现多线程程序。

void WorkFun(int param)
{
	...
	for(int i = 0;i<4;i++)
	{
		cout<<param<<"Hello, other thread." <<n << endl;
	}
	...
}
int main()
{
	thread t[4];
	for(int i = 0;i<4;i++)
	{
		t[i] = thread(WorkFun,param);
	}
}

多线程操作是抢占式执行,当多线程对某一个临界区资源进行访问或修改时,应该对临界区进行加锁,被锁所住的区域称为临界区。
例如上例中,cout标准输出流被多线程抢占式输出时,会造成打印结果乱序的结果。因此对其进行加锁。需要注意的是:频繁的加锁和解锁对性能的消耗是不可忽略的。

#include <mutex>
mutex m;
    void WorkFun(int param)
    {
    	...
    	for(int i = 0;i<4;i++)
    	{
    		m.lock();
    		cout<<param<<"Hello, other thread." <<n << endl;
    		m.unlock();
    	}
    	...
    }

对临界区加了所之后,如果临界区内的代码出现异常,或其它原因导致没有解锁或解锁代码没有执行,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值