c++ 多线程编程

1 多线程

1.1 c++11多线程相关的头文件

c++11新标准中引入了四个头文件来支持多线程编程,他们分别是,,,<condition_variable>和

1.2 Mutex系列类

std::mutex, 最基本的mutex类
std::recursive_mutex,递归mutex类
std::time_mutex,定时mutex类
std::recursive_timed_mutex,定时递归mutex类

1.3 Lock类

std::lock_guard,与mutex RAII相关,方便线程对互斥量上锁
std::unique_lock,与mutex RAII相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。

std::try_lock,尝试同时对多个互斥量上锁
std::lock,可以同时对多个互斥量上锁
std::call_once,如果多个线程需要同时调用某个函数,call_once可以保证多个线程对给函数只调用一次。

1.4 使用

如果第一次运行了lock()这个方法,而没有运行unlock()这个方法,第二次再运行lock()这个方法时,程序就会卡停在这里。而std::lock_guard()就是用来替代lock和unlock。一般可以将需要保护的代码用一个大括号括起来,然后在大括号括起来的第一行代码定义std::lock_guard()。当进入这个作用域时,构造std::lock_guard()对象,在std::lock_guard()的构造函数中其实是执行了lock()这个方法,当退出这个作用域的时候,std::lock_guard()对象将会被析构,而在std::lock_guard()的析构函数中实际是调用了unlock()。

1.5 std::condition_variable

用于多线程之间的通信,它可以阻塞一个或同时阻塞多个线程。std::condition_variable需要与std::unique_lock配合使用。

当std::condition_variable对象的某个wait函数被调用的时候,他使用std::unique_lock来锁住当前线程。当前线程会一直被阻塞,当另外一个线程在相同的
std::condition_variable对象上调用了notification函数来唤醒当前线程

notify_one:唤醒某个wait线程,如果当前没有等待线程,则该函数什么也不做;如果同时存在多个等待线程,则唤醒某个线程是不确定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值