六、C++多线程开发总结

目录

一、线程间通信的主要方式

二、多个线程处理同一个文件或数据

三、互斥锁和自旋锁的区别

四、互斥锁和条件变量

五、常用的锁


一、线程间通信的主要方式

        (1).共享内存,即进程内线程间传递指针或引用进行信息传递,非线程安全,需要加锁;

        (2).使用消息队列,非线程安全,配合互斥锁和条件变量;

        (3).使用promisefuture.

        (4).使用packaged_task:将函数的执行和结果的获取分离。

        (5).使用async异步函数处理方式

        注意(4)和(5)是对同一个函数的执行和结果获取的分离。(1)、(2)和(3)不同线程即不同函数之间的消息传递。

二、多个线程处理同一个文件或数据

        (1).可以自行拆分多个线程,并对要处理的数据进行分段,每个线程处理不同的数据段,即可完成;

        (2).c++17中的for_each的使用

三、互斥锁和自旋锁的区别

        互斥锁:锁在锁定的情况下,别的线程要等待锁被释放才能继续执行,此时会进入阻塞态,释放CPU资源

        自旋锁:锁在锁定的情况下,别的线程要等待锁被释放才能继续执行,此时会一直死等执行while(1),浪费CPU资源,一般用在多核通信上。

四、互斥锁和条件变量

        既然互斥锁已经会存在阻塞情况了,那为什么还要用条件变量呢? 

        互斥锁主要是用在资源互斥上,而条件变量是在条件满足后,一个线程通知另外一个线程。如果条件变量的“条件”是资源不被使用,那么在使用互斥锁后,不需再使用条件变量。而其他情况,需要满足的“条件”满足后,需要执行notify告知阻塞等待的线程继续执行。

五、常用的锁

        互斥锁,读写锁,自旋锁,信号量,条件变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值