摘要: 1、首先顶层const和底层const是围绕指针*p的说法。底层:const int *p,const不是修饰指针p,指针所指的值不能改变;顶层:int *const p,const修饰指针p,指针本身不能改变;(看const在*的位置) 2、this指针,指向对象本身,是一个*const this 阅读全文
posted @ 2018-06-06 10:29 秋雨声 阅读(325) 评论(0) 推荐(0) 编辑
摘要: 先看一个简单的问题: 一、定义一个空的类型,对于其对象我们sizeof其大小,是1字节。因为我们定义一个类型,编译器必须为其分配空间,具体分配多少是编译器决定,vs是1字节,分配在栈区。 那,这一个字节会被初始化吗? 举个例子: 其输出: 我们查看内存,看得到都初始化为:CC CC CC CC 多调 阅读全文
posted @ 2018-06-05 23:01 秋雨声 阅读(384) 评论(0) 推荐(0) 编辑
摘要: Lambda表达式是干么的?.lambda表达式首先是一个表达式,是一个函数对象一个匿名函数,但不是函数。现在流行语言例如:JS、PHP都支持一种和面向过程、面向对象并列的函数式编程,lambda就是一种函数式编程,以函数的形式出现,但是是一个表达式。C++11与时俱进,加入了lambda表达式。在 阅读全文
posted @ 2018-06-04 20:55 秋雨声 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 我们通过创建 std::thread 对象来对线程进行管理。在一些情况下,这种方式不可行,因为需要在线程的整个生命周期中对其进行管理,并根据硬件来确定线程数量,等等。另一种情况是,当使用多线程来解决某个问题时,在某个条件达成的时候,可以提前结束。 所以从管理线程和任务的机制,两个角度介绍线程池。 一 阅读全文
posted @ 2018-06-04 17:35 秋雨声 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 本章主要内容 线程间划分数据的技术 影响并发代码性能的因素 性能因素是如何影响数据结构的设计 多线程代码中的异常安全 可扩展性 并行算法的实现 前面主要介绍了并发的数据结构,现在从高层(但也是基本的)考虑,如何使用线程,哪些代码应该在哪些线程上执行;以及,这将如何影响代码的清晰度,并从底层细节上了解 阅读全文
posted @ 2018-06-04 10:54 秋雨声 阅读(665) 评论(0) 推荐(0) 编辑
摘要: 主要内容: 并发数据结构设计的意义 指导如何设计 实现为并发设计的数据结构 如果一种数据结构可以被多个线程所访问,其要不就是绝对不变的(其值不会发生变化,并且不需同步),要不程序就要对数据结构进行正确的设计,以确保其能在多线程环境下能够(正确的)同步。一种选择是使用独立的互斥量,其可以锁住需要保护的 阅读全文
posted @ 2018-06-04 08:50 秋雨声 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 一、主要涉及 在上一章中,我们看到各种在线程间保护共享数据的方法。当你不仅想要保护数据,还想对单独的线程进行同步。例如,在第一个线程完成前,可能需要等待另一个线程执行完成。 C++ 标准库提供了一些工具可用于同步操作,形式上表现为条件变量(condition variables)和期望(future 阅读全文
posted @ 2018-06-03 15:32 秋雨声 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 一、共享内存带来的问题 读时没问题,写时会有竞争问题。 二、解决方法 1、最简单的办法就是对数据结构采用某种保护机制,确保只有进行修改的线程才能看到不变量被破坏时的中间状态。从其他访问线程的角度来看,修改不是已经完成了,就是还没开始。 2、另一个选择是对数据结构和不变量的设计进行修改,修改完的结构必 阅读全文
posted @ 2018-06-02 23:33 秋雨声 阅读(652) 评论(0) 推荐(0) 编辑
摘要: 一、启动线程 注意t是创建的线程,do_something是函数对象,不要传入函数。提供的函数对象会复制到新线程的存储空间当中,函数对象的执行和调用都在线程的内存空间中进行。 join(),detach() 二、线程传参 线程调用传参 注意线程初始化不会对舛讹的参数隐式转换,需要显式转换。 三、转移 阅读全文
posted @ 2018-06-02 19:08 秋雨声 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 一 、多进程并发和多线程并发 多进程并发有进程间通信机制,更加安全。第一个缺点:进程间通信为避免一个进程修改另一个进程,比如读时共享写时复制使得花销更大;第二个缺点:需要启动进程,还要系统内核来管理进程,因为C++ 没有对进程提供任何封装。 但是进程相对独立,可以分布式运行在独立的机器上,算是一个优 阅读全文
posted @ 2018-06-02 15:39 秋雨声 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 一、表的常见操作 对于一个链表,某个元素有其前驱和后继。对表的操作:find返回关键字首次出现的位置;insert和delete插入和删除某个元素;findkth返回某个位置上的元素; 二、表的简单数组实现 定义一个数组要初始化大小,要实现动态数组的形式,势必会浪费一定资源。由于数组的特性,会涉及后 阅读全文
posted @ 2018-06-02 14:05 秋雨声 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一、递归 递归自己调用自己,调用过程是一个碗状结构。但是需要确保在碗底能得到基准情形(数据)。有点类似多线程中嵌入多线程在解决斐波那契时的sync。其本质特征是一个大问题可以分解成更小的问题,小问题解法和大问题一样。 每次调用函数都要有三个操作:调用前先保存寄存器,并在返回时恢复;复制实参;旧值不能 阅读全文
posted @ 2018-06-02 10:25 秋雨声 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 【前言】主成分分析(PCA)实现一般有两种,一种是对于方阵用特征值分解去实现的,一种是对于不是方阵的用奇异值(SVD)分解去实现的。 一、特征值 特征值很好理解,特征值和特征向量代表了一个矩阵最鲜明的特征方向。多个特征值和特征向量的线性组合可以表示此矩阵。选取特征值最大的特征值对应的特征向量,此特征 阅读全文
posted @ 2018-06-01 16:21 秋雨声 阅读(7549) 评论(0) 推荐(1) 编辑
摘要: 1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。在tcp长连接时,发送端发到buffer里面,接收端也有个buffer。如果没有及时从buf中取出,会造成粘包现象。 2 为什么出现粘包现象 (1)发送方原因 我们知道 阅读全文
posted @ 2018-06-01 13:40 秋雨声 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 一、问题提出 单处理器上只能用串行算法,所谓的并行也是时间片轮转,没有真正达到并发的意义。上下文切换还会有时间消耗,但是我们不可能为每一个任务都分配一个cpu,是一种不得已而为之的并发。前面是软件并发,但是多处理器时代,允许多条指令在处理器上并发执行,讨论硬件并发。并发有多进程并发和多线程并发,二者 阅读全文
posted @ 2018-06-01 10:13 秋雨声 阅读(452) 评论(0) 推荐(0) 编辑