c++高级编程
比卡丘不皮
一个热爱学习与热爱分享的有志青年
展开
-
c++多线程 五 ---(future/promise 模型)
这个代码很简单不太详细讲解,future/promise 模型 想象成为线程间传递结果的通信信道。#include <future>int calculate(){ return 123;}void testcalculate(){ auto fut = async(calculate); //auto fut = async(launch::async ,calculate); //创建一个线程 //auto fut = async(launch::deferred,原创 2020-09-15 17:37:42 · 354 阅读 · 0 评论 -
c++多线程 四----(互斥与锁 )
标准库支持互斥的形式包括互斥体(mutex)类和锁类。这些都可以实现同步。互斥类:与互斥类都定义在<mutex>中,所以使用的话,需要加载这个头文件非定时的互斥体类:std::mutex; std::recursive_mutex;都支持下面的方法:lock(): 调试线程将尝试获取锁,并且阻塞直到获得锁。这个方法会无限期的阻塞。如果希望设置线程阻塞的最长时间,应该使用定时的互斥体。 try_lock(): 调用线程将尝试获得锁,如果当前锁被其他线程持有,这个...原创 2020-09-15 16:55:34 · 547 阅读 · 0 评论 -
c++多线程三----(原子操作库)
原子操作库 原子类型允许原子访问,这意味着不需要额外的同步机制就可以执行并发的读写操作。没有原子操作,递增一个变量就不是线程安全的,因为编译器首先将值从内存加载到寄存器中,递增它,再把结果保存回内存。另一个线程可能在这个可能在这个递增过程中接触到该内存,导致了一个竞争条件:使用原子类型,需要包含<atomic>头文件。 在多线程中访问一段数据,原子也可以解决缓存一致性,内存排序,编译优化等问题。基本上,不使用原子或者显示的同步机制,就不可能安全的在多线程中...原创 2020-09-15 14:46:04 · 317 阅读 · 0 评论 -
c++多线程二 ---(复制和从新抛出异常)
这个建议看《c++高级编程》本书中的讲解,关于线程捕捉异常的问题,这里就不讲述了,直接上代码:void doSomeWork(){ for (int i=0; i<5;i++) { cout << i << endl; } cout << "Thread throwing a runtime_error exception ..." << endl; throw runtime_error("Exception from threa原创 2020-09-15 11:57:00 · 221 阅读 · 0 评论 -
c++多线程 一 ----(线程的创建)
小伙伴们在刚接触程序的时候呢,知道程序是按顺序一步一步向下进行的,可能你知道一个函数执行完,再去执行另一个函数。那如何在一段时间内,“同时”执行几个函数呢,让它们同时进行呢,这里的同时是带引号的,在一个cpu的情况下,任何计算都是需要时间的,只是他们分别占用了很少的时间段,让你感觉上是同时进行的。 简单的理解就是我们看到日常的灯,是通过交流电,当它亮的时候,不是一直亮着的,而是一闪一闪的,肉眼是看不出来的。好了说了这样多我们来看看吧。函数指针创建线程包含头文件:#inc...原创 2020-09-10 17:59:59 · 263 阅读 · 0 评论 -
几分钟学会c++ lambda 表达式
昨天复习到python的lambda表达式,今天总结一下c++ 中的lambda 表达式中的常用用法,只需几分钟,你将很快的学会它。lambda 常见的形式 [capture block](parameter){ progress}; 其中() 是可选的。[capture block] :[] 捕捉,这里一般可空,可写你要捕捉的变量(parameter):() 这个就是写参数的,是可选的,也就是可写,也可以省略{progress} :{} 这里写你要处理的过程,就是平时...原创 2020-07-07 11:47:07 · 322 阅读 · 0 评论